Extrahiere die Zeichenfolge zwischen zwei Zeichenfolgen in Java

Ich versuche String zwischen zu bekommen, hier ist meine Implementierung:

String str = "ZZZZL  AFFF "; Pattern pattern = Pattern.compile(""); String[] result = pattern.split(str); System.out.println(Arrays.toString(result)); 

es kehrt zurück

 [ZZZZL , AFFF ] 

Aber meine Erwartung ist:

 [ dsn , AFG ] 

Wo liege ich falsch und wie korrigiere ich es?

Dein Muster ist in Ordnung. Aber du solltest nicht split() es wegcasting, du solltest es find() . Der folgende Code gibt die gesuchte Ausgabe an:

 String str = "ZZZZL < %= dsn %> AFFF < %= AFG %>"; Pattern pattern = Pattern.compile("< %=(.*?)%>"); Matcher matcher = pattern.matcher(str); while (matcher.find()) { System.out.println(matcher.group(1)); } 

Ich habe diese Frage hier beantwortet: https://stackoverflow.com/a/38238785/1773972

Grundsätzlich verwenden

 StringUtils.substringBetween(str, "< %=", "%>"); 

Dies erfordert die Verwendung der Bibliothek “Apache commons lang”: https://mvnrepository.com/artifact/org.apache.commons/common-lang3/3.4

Diese Bibliothek hat viele nützliche Methoden um mit string zu arbeiten. Sie werden wirklich davon profitieren, diese Bibliothek in anderen Bereichen Ihres Java-Codes zu erforschen !!!

Deine Regex sieht korrekt aus, aber du splitting mit ihr, anstatt mit ihr matching . Du willst so etwas:

 // Untested code Matcher matcher = Pattern.compile("< %=(.*?)%>").matcher(str); while (matcher.find()) { System.out.println(matcher.group()); } 

Jlordo Ansatz deckt spezifische Situation ab. Wenn Sie versuchen, eine abstrakte Methode daraus zu erstellen, können Sie feststellen, ob ‘ textFrom ‘ vor ‘ textTo ‘ steht. Andernfalls kann die Methode eine Übereinstimmung für ein anderes Vorkommen von ‘ textFrom ‘ im Text zurückgeben.

Hier ist eine fertige abstrakte Methode, die diesen Nachteil abdeckt:

  /** * Get text between two strings. Passed limiting strings are not * included into result. * * @param text Text to search in. * @param textFrom Text to start cutting from (exclusive). * @param textTo Text to stop cuutting at (exclusive). */ public static String getBetweenStrings( String text, String textFrom, String textTo) { String result = ""; // Cut the beginning of the text to not occasionally meet a // 'textTo' value in it: result = text.substring( text.indexOf(textFrom) + textFrom.length(), text.length()); // Cut the excessive ending of the text: result = result.substring( 0, result.indexOf(textTo)); return result; }