У меня есть определенный текст на 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(matcher.group()); itemLines.append('\n');
. Вы не должны выполнять конкатенацию строк, используя +, когда у вас есть строковый буфер. Также я бы использовал StringBuilder вместо StringBuffer. - person RokL   schedule 30.03.2012