难以写出正则表达式模式

时间:2013-07-14 15:01:43

标签: java regex split tokenize

我想标记一个.txt文件,如下所示 产品,品牌 电视,名称:LG:索尼 冰箱,凯尔维纳特,名称:戈德瑞

我想省略第一行products,brands

将数据从下一行开始放入具有此结构的类的对象中     class Product {     字符串标题;     列出品牌;     }

标题应包含“,”之前的第一个单词之前的任何内容 列表品牌应包含“名称:”之后的所有单独标记 我必须忽略“名称”这个词而不是放在对象字段中

示例名为prod的对象应包含此数据 prod.title =电视 品牌列表必须包含lg和sony

这样做的最佳方法是什么?

这是代码::

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();
    }

}

}

2 个答案:

答案 0 :(得分:0)

方法split()接收空格很重要的正则表达式。

将拆分更改为:

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

这应该有效。方括号表示“内部提到的任何字符”。 \\s*表示“零个或多个空格。”

看来这就是你所需要的。

答案 1 :(得分:0)

  1. 我会使用Scanner对象逐行阅读
  2. 并插入通过扫描仪所需的Pattern