У меня есть определенный текст на Java, и я хочу использовать шаблон и matcher, чтобы извлечь что-то из него. Это моя программа:Шаблон/Matcher в Java?
public String getItemsByType(String text, String start, String end) {
String patternHolder;
StringBuffer itemLines = new StringBuffer();
patternHolder = start + ".*" + end;
Pattern pattern = Pattern.compile(patternHolder);
Matcher matcher = pattern.matcher(text);
while (matcher.find()) {
itemLines.append(text.substring(matcher.start(), matcher.end())
+ "\n");
}
return itemLines.toString();
}
Этот код работает полностью Когда искомый текст находится на той же строке, например:
String text = "My name is John and I am 18 years Old";
getItemsByType(text, "My", "John");
сразу захватывает текст: «Меня зовут Джон» из текста , Однако, когда мой текст выглядит следующим образом:
String text = "My name\nis John\nand I'm\n18 years\nold";
getItemsByType(text, "My", "John");
Это ничего не захватить, так как «Мои» и «Джон» находятся на разных линиях. Как я могу это решить?
Вы должны изменить 'itemLines.append (text.substring (matcher.start(), matcher.end()) + "\ п");' 'к itemLines.append (matcher.group()) ; itemLines.append ('\ n'); ' Вы не должны выполнять конкатенации строк, используя +, когда у вас есть строковый буфер под рукой. Также я бы использовал StringBuilder вместо StringBuffer. –