2016-04-07 2 views
0

У меня есть поток данных Строки, которая может иметь значениеСтрока Java Split/разбор проблема с использованием регулярных выражений

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.... 

Все я заинтересован это значение ключа, которые знач1, 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]; 
} 

Этот код работает отлично, если файл начинается с «кв {», но в описанном выше случае, когда файл запускается с ниже значения упоминанием, анализатор дает ошибку.

system_id "2.2.2.1" 
    component_id 6 
    sequence_number 11 
    timestamp 1459202982 

Любая идея, как я могу пропустить этот блок данных?

Примечание: этот блок данных может появляться иногда после некоторых тегов «kv {}», все, что мне нужно, это игнорировать его всякий раз, когда это происходит.

+0

Просьба сообщить подробности об ошибке. –

+0

Работает ли [эта демонстрация] (http://ideone.com/oQxT22), как и ожидалось? –

ответ

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

Пожалуйста, обратите внимание, что упомянутый выше файл является только моим собственным тестовым файлом.

+0

Этот шаблон не компилируется Исключение из потока «main» java.util.regex.PatternSyntaxException: неизвестное имя свойства символа {+} рядом с индексом 3 ^ \ p + key. + $ ^^^ – Ammad

+0

Можно ли выбрать theLineYouWant равным все до тех пор, пока "}" не встретится? Это также будет охватывать случай kv { ключ "val3" данные "53" } – Ammad

Смежные вопросы