2016-07-26 2 views
0

Wie bekomme ich den Text zwischen zwei Zeilen einer Textdatei mit Java? Ich versuche, so zu tun, aber es funktioniert nicht:Wie bekomme ich den Text zwischen zwei Zeilen einer Textdatei mit Java

String input = "!!!Error deploying file order\\POST_ORDER_UpdateTaxAmountCurrInCo.sql at 22-JUL-16 08:07:Chathura aBhanakana1!!!Error deploying file order\\POST_ORDER_"; 
Pattern p = Pattern.compile("(?<=\\b!!!Error deploying file\\b).*?(?=\\b!!!Error deploying file\\b)"); 
Matcher m = p.matcher(input); 
List<String> matches = new ArrayList<String>(); 
while (m.find()) { 
    System.out.println("A " + m.group()); 
} 
+0

Was wollen Sie hier erreichen? – NAIT

+0

, um den Text zwischen den Textfeldern "!!! Error deploying file" zu erhalten. –

+0

put '. *?' In '()' –

Antwort

1

aktualisiert Antwort

regex

String pattern = "([\\s\\S]*?)(!!!Error deploying file)"; 

Erklärung der obigen Muster.

  1. *? - ein einzelnes Zeichen zwischen Null und unbegrenzte Zeiten entsprechen
  2. \ s -
  3. \ S alle Leerzeichen Charakter entsprechen - passt auf alle Nicht-Leerzeichen

Beispielcode:

String line = "!!!Error deploying file order\\POST_ORDER_UpdateTaxAmountCurrInCo.sql at 22-JUL-16 08:07:Chathura aBhanakana1!!!Error deploying file order\\POST_ORDER_UpdateTaxAmountChathura aBhanakana1AAAAA !!!Error deploying file order\\POST"; 

String pattern = "([\\s\\S]*?)(!!!Error deploying file)"; 

// Create a Pattern object 
Pattern r = Pattern.compile(pattern); 

// Now create matcher object. 
Matcher m = r.matcher(line); 
while (m.find()) { 
    String str = m.group(1); 
    if(str != null && !str.isEmpty()){ 
    System.out.println("Found value: " + str); 
    } 
} 

Ausgang

  1. gefunden Wert: order \ POST_ORDER_UpdateTaxAmountCurrInCo.sql bei 22 -JUL-16 08: 07: Chathura aBhanakana1
  2. Gefundener Wert: Auftrag \ POST_ORDER_UpdateTaxAmountChathura aBhanakana1AAAAA

Check output here

Split Verfahren unter Verwendung von

Beispielcode:

String line = "!!!Error deploying file order\\POST_ORDER_UpdateTaxAmountCurrInCo.sql at 22-JUL-16 08:07:Chathura aBhanakana1!!!Error deploying file order\\POST_ORDER_UpdateTaxAmountChathura aBhanakana1AAAAA !!!Error deploying file order\\POST"; 

for (String retval: line.split("!!!Error deploying file")){ 
     System.out.println(retval); 
} 

Ausgabe:

1) order\POST_ORDER_UpdateTaxAmountCurrInCo.sql at 22-JUL-16 08:07:Chathura aBhanakana1 
2) order\POST_ORDER_UpdateTaxAmountChathura aBhanakana1AAAAA 
3) order\POST 

Check output here

+0

Es ist Arbeit.Aber die Sache ist, wenn die Zeile mehr als zwei hat "!!! Error Deploying File" diese words.it nimmt die erste und letzte.Ex: !!! Fehler beim Deployment der Datei Chathura aBhanakana1 !!! Fehler bei der Bereitstellung fileAAA !!! Fehler beim Deployen der Datei ,,:, Hier kann ich nicht beide Wörter innerhalb des Musters nehmen –

+0

@chathuraBhanaka Entschuldigung, ich habe nicht verstanden, was Sie sagen, bitte geben Sie ein Beispiel und sagen Sie, welche Ausgabe Sie wollen. Zum Beispiel - ** Meine Zeichenfolge ist dies '" "', sollte die Ausgabe dieser '" "sein. ** Wenn Sie mehr als eine Zeichenfolge haben, dann stellen Sie alle verschiedenen Zeichenfolgen mit welcher Ausgabe Sie erwarten. – Ravikumar

+0

!!! Fehler beim Bereitstellen der Dateiorder \ POST_ORDER_UpdateTaxAmountCurrInCo.sql am 22-JUL-16 08: 07: Chathura aBhanakana1 !!! Fehler beim Verteilen der Datei \ POST_ORDER_UpdateTaxAmountChathura aBhanakana1AAAAA !!!Fehler beim Bereitstellen der Datei Reihenfolge \ POST; ........ Wenn Sie dies als eine Zeile in Ihrem Code nehmen. Was ich will ist :: Order \ POST_ORDER_UpdateTaxAmountCurrInCo.sql am 22-Juli-16 08: 07: Chathura aBhanakana1 und order \ POST_ORDER_UpdateTaxAmountChathura aBhanakana1AAAAAAAAAAAAAAAAAAAAAA this.because diese sind zwischen Pattern –

Verwandte Themen