我有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 {}”标签之后,偶尔会出现这个数据块,我只需要在它出现时忽略它。
答案 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);
}
}
}
}
请记住,上面提到的文件只是我自己的测试文件。