2013-07-14 54 views
-2

我要来标记文本文件是如下 产品,品牌 电视,名称:LG:索尼 冰箱,凯尔维纳特,名称:戈德瑞难度写正则表达式模式

我想省略第一线products,brands

,并把从下一行的数据开始在具有这种结构 类产品{ 字符串标题的类的对象; 名单品牌; }

标题应该包含之前的第一个事情之前“” 列表品牌后应包含所有单独的令牌‘的名字:’ 我不得不忽视单词‘名称’,而不是放在对象字段

例如名为督促对象应该包含这个数据 prod.title =电视的品牌 列表必须包含LG和索尼

是什么做的最好方法?

这是代码:: split()接收正则表达式,其中空间是重要

public class tokenize { 

/** 
* @param args 
*/ 
public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    int i=0; 
    try { 
     FileReader fr=new FileReader("myfiles\\"+"sample.txt"); 
     BufferedReader br=new BufferedReader(fr); 
     String line; 
     try { 
      while((line=br.readLine())!=null){ 
       String tokens[]=line.split(", | :"); 
       while(tokens.length!=0) 
       { 
        System.out.println(tokens[i]); 
        i++; 
        System.out.println(); 
       } 

      } 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 


    } catch (FileNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

} 

} 
+0

这样做是尝试编码,并要求此处查看具体问题的最好方法所需的Pattern。您完全描述了必须完成的工作以及类应该如何工作,因此编写代码并在具有某些问题的情况下回到特定问题 – BackSlash

+1

您可以显示已经尝试过的代码吗? –

回答

0
  1. 我会用一个Scanner对象由线
  2. 读取行,并插入通过扫描仪
+0

FileReader fr = new FileReader(“myfiles \\”+“sample.txt”); \t \t \t Scanner scn = new Scanner(fr); \t \t \t Pattern ptrn = Pattern.compile(“\\ s * [,:] \\ s *”); \t \t \t scn.useDelimiter(ptrn); \t \t \t而(scn.hasNext()) \t \t \t { \t \t \t的System.out.println(scn.nextLine()); \t \t \t} – nnm

+0

这就是我添加...它打印文本文件,因为它是 – nnm

+0

尝试在println() –

0

方法。

你分割更改为:

String tokens[]=line.split("\\s*[,:]\\s*"); 

这应该工作。方括号表示“里面提到的任何字符”。 \\s*表示“零个或多个空格”。

看来,这是你所需要的。

+0

这样做后,我得到一个 arrayindexoutofbounds例外......只有产品和品牌是印刷的两个字 – nnm