Мне нужно сопоставить определенные вещи из строк входного текста. Линии выглядят так:
to be/ Σ _ Σ [1pos, 1neg] {0=1, 2=1}
Я использую класс Scanner для чтения каждой строки текста, и я написал следующий код. Тем не менее, что-то не работает должным образом, потому что шаблон «к» не сопоставляется со строкой, и это должно быть, потому что «в» содержится в строке (я пытался сопоставить не только «к» из строки, но ничего не соответствует):
Scanner scanner = new Scanner(file);
while(scanner.hasNext()) {
String line = scanner.nextLine();
System.out.println("line: " + line);
Pattern p_pos = Pattern.compile("to");
Matcher m_pos = p_pos.matcher(line);
String match = m_pos.group(0);
System.out.println("match: " + match);
boolean b_pos = m_pos.matches();
if(b_pos) {
System.out.println(match);
}
}
Выход:
line: to be/ Σ _ Σ [1pos, 1neg] {0=1, 2=1}
Exception in thread "main" java.lang.IllegalStateException: No match found
at java.util.regex.Matcher.group(Matcher.java:485)
at lady.PhrasesFromFile.readFile(PhrasesFromFile.java:31)
at lady.PhrasesFromFile.main(PhrasesFromFile.java:17)
У меня есть еще один вопрос: как я могу обработать строку, чтобы я мог хранить все от начала строки до первого символа "/"? Я не мог найти какой-либо метод для этого в API. Возможно ли это сделать? Я в основном хочу последовательно пройти через строку, сохранить фрагменты строки в различных переменных, а затем использовать значения этих переменных. Поскольку я не знаю, сколько токенов у меня до первого символа «/», я не могу использовать next () определенное количество раз.
Спасибо заранее.