Java String使用正则表达式拆分/解析问题

时间:2016-04-07 17:30:00

标签: java regex parsing java.util.scanner

我有String of String数据,可能有值

system_id "2.2.2.1"
component_id 6
sequence_number 11
timestamp 1459202982

kv {
  key "val1"
}
kv {
  key "val2"
}
kv {
  key "val3"
}

system_id "2.2.2.1"
component_id 6
sequence_number 15
timestamp 1459202982

kv {
  key "val4"
}
kv {
  key "val5"
} and so on....

我感兴趣的是key的值,即val1,val2,val3 ....

我正在使用扫描仪,如下所示,

scan = new Scanner(new File("kvfiles/file1")).useDelimiter("\\s+kv\\s+\\{\\s+");  //To ignore any thing before "kv"

while (scan.hasNext()) {
                String str = scan.next();
                finalString = str.split("\\s+\\}")[0];
}

当文件以“kv {”启动时,此代码正常工作但在上面的情况下,当文件以下面提到的值启动时,解析器给出错误。

    system_id "2.2.2.1"
    component_id 6
    sequence_number 11
    timestamp 1459202982

我知道如何跳过这个数据块?

注意:在一些“kv {}”标签之后,偶尔会出现这个数据块,我只需要在它出现时忽略它。

1 个答案:

答案 0 :(得分:1)

为什么不采取有趣的行?

public class Test {

    public static void main(String[] args) throws FileNotFoundException {
        Pattern p = Pattern.compile("\\s+key.+");

        Scanner sc = new Scanner(new File("src/main/resources/test.txt"));
        while (sc.hasNextLine()) {
            sc.nextLine();
            String theLineYouWant = sc.findInLine(p);
            // scnn this line again here
            if (theLineYouWant != null) {
                System.out.println(theLineYouWant);
            }
        }
    }
}

请记住,上面提到的文件只是我自己的测试文件。