2017-03-08 1 views
1

Ich möchte Folgendes analysieren und als neue Zeichenfolge speichern, mit der Bedingung, dass mawi gespeichert wird und alles andere entfernt wird.Teilzeichenfolge zwischen der ersten Instanz zweier verschiedener Symbole

<ns0:Assignee>mawi - Manfred Wilson</ns0:Assignee> 

Eine Lösung Ich nehme könnte ein Teil mit dem ersten Zeichen nach den ersten > und endet zwei Zeichen vor den ersten - Start sein. Alle Daten sind identisch. Das Ergebnis ist ein String mit dem Wert mawi.

String initial = "<ns0:Assignee>mawi - Manfred Wilson</ns0:Assignee>"; 
String substring = initial.substring(example.indexOf(">")); 

Nicht sicher wohin von hier gehen ... Irgendwelche Gedanken?

+2

Sie XML sind Schnipsel? Wenn ja, verwende einen XML-Parser – Jens

+0

SubstringBefore/SubstringAfter/SubstringBetween - Teilstring-Extraktion relativ zu anderen Strings: https://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/ StringUtils.html – thanga

Antwort

1

So jetzt haben Sie substring, die gleich ist: >mawi - Manfred Wilson</ns0:Assignee>.

Nun können Sie Ihre Teilzeichenfolge erneut unterteilen, um nur mawi zu finden, so;

String initial = "<ns0:Assignee>mawi - Manfred Wilson</ns0:Assignee>"; 
String midSub = initial.substring(initial.indexOf('>')); 
String finalSub = midSub.substring(1, midSub.indexOf(' ')); // 1 because we still have `>` 
System.out.println(finalSub); 

Oder Motto:

String finalSub = initial.substring(initial.indexOf('>')+1, initial.indexOf(' ')); 
2

Obwohl der Code unten den Trick tun, empfehle ich Ihnen Jsoup zu verwenden oder XML Parse, wenn Sie mehrere Zeichenfolgen wie dieser

Pattern pattern = Pattern.compile("<ns0:Assignee>(.+?)</ns0:Assignee>"); 
    Matcher matcher = pattern.matcher("<ns0:Assignee>mawi - Manfred Wilson</ns0:Assignee>"); 
    matcher.find(); 
    String result = matcher.group(1); 
    String finalString = result.split(" - ")[0]; 
    System.out.println(finalString); // mawi 
+0

Dieses '(. +?)' Funktioniert nicht, wenn ein Zeilenumbruch zwischen den beiden Teilstrings besteht. Fügen Sie eine "Pattern.DOTALL" -Flag hinzu. –

1

Show Verarbeitung sind diese:

String s = "<ns0:Assignee>mawi - Manfred Wilson</ns0:Assignee>"; 
s = s.substring(s.indexOf("<ns0:Assignee>")+"<ns0:Assignee>".length(), s.indexOf("</ns0:Assignee>")); 
2

Wenn alle Saiten sind wie Ihr Beispiel String, könnten Sie mit diesem gehen:

initial.substring(initial.indexOf('>') + 1, initial.indexOf(' ')); 

Beachten Sie die + 1 am Startindex.

Wenn Ihre Strings komplizierter sind, würde ich empfehlen, entweder eine Bibliothek für die Arbeit mit XML oder Reguläre Ausdrücke zu verwenden.

1
public class string { 
    public static void main(String[] args) { 

    String s = "<ns0:Assignee>mawi - Manfred Wilson</ns0:Assignee>"; 
    s = s.substring(14, 18); 
    System.out.println(s); 
    } 
} 
Verwandte Themen