Ich habe einen bestimmten Text in Java, und ich möchte mit Muster und Matcher etwas daraus extrahieren. Das ist mein Programm:Muster/Matcher in 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();
}
Dieser Code funktioniert voll WHEN der gesuchte Text auf der gleichen Linie ist, zum Beispiel:
String text = "My name is John and I am 18 years Old";
getItemsByType(text, "My", "John");
sofort packt den Text „Mein Name ist John“ aus dem Text . Wenn jedoch mein Text sieht wie folgt aus:
String text = "My name\nis John\nand I'm\n18 years\nold";
getItemsByType(text, "My", "John");
Es hat nichts greifen, da „My“ und „John“ auf verschiedenen Linien sind. Wie löse ich das?
Sie sollten 'ändern itemLines.append (text.substring (matcher.start(), matcher.end()) + "\ n");' auf 'itemLines.append (matcher.group()) ; itemLines.append ('\ n'); ' Sie sollten String-Verkettungen nicht mit + durchführen, wenn Sie einen String-Puffer zur Hand haben. Außerdem würde ich StringBuilder anstelle von StringBuffer verwenden. –