2016-06-22 15 views
1

ich Split String Hilfe benötigen, wenn String gefunden wird, nur auf neuestes AuftretenSplit-String in neuestem Auftreten des Teils

Substring to search(example):123 
String: 123hello123boy123guy123girl 
Res: 123hello123boy123guy (result on split[0]) 

Ex: hello123boy 
Res:hello 

ich mit dieser Funktion bin versucht, aber diese Spaltung nur auf dem ersten occource.

public static String[] getSplitArray(String toSplitString, String spltiChar) { 
    return toSplitString.split("(?<=" + spltiChar + ")"); 
    } 
+0

Teilstring ist immer im Inneren, aber es ist vielleicht 1-n mal –

+0

Was passiert, wenn es mit dem Teilstring 123 endet? – TiMr

Antwort

0

Verbesserung auf Kent ‚s Antwort: Das wird Sie tatsächlich ein geteiltes Array geben eher als ein Einzelelement-Array mit dem ersten Teil Ihrer String:

String[] text = { 
     "123hello123boy123guy123girl", // 123hello123boy123guy 
     "hello123boy"// hello 
}; 
for (String s: text) { 
    System.out.println(
     Arrays.toString(
      s.split("123(?=((?!123).)*?$)") 
     ) 
    ); 
} 

Ausgabe

[123hello123boy123guy, girl] 
[hello, boy] 
+0

Danke, es funktioniert perfekt –

+0

@AlessioDiMarco du bist willkommen! – Mena

0

Sie brauchen nicht einen regulären Ausdruck für das, können Sie einfach String#lastIndexOf:

-> String s = "123hello123boy123guy123girl" 

-> s.substring(0, s.lastIndexOf("123")); 
| Expression value is: "123hello123boy123guy" 

-> s.substring(s.lastIndexOf("123")); 
| Expression value is: "123girl" 
+0

Ich denke StringString() sollte mit Vorsicht verwendet werden, wenn Java-Version <1.7 Aber diese Antwort ist auch ein guter Weg zu gehen. – Kent

4

Wenn Sie es in einzelnen split() tun wollen, sollte diese Arbeit:

string.split("123((?!123).)*?$") 

Bsp .:

String s = "foo123bar123hhh123tillHere123Bang"; 
System.out.println(s.split("123((?!123).)*?$")[0]); 

Ausgänge:

foo123bar123hhh123tillHere 

Ein anderer Ansatz wäre, nur split("123") dann join die Elemente, die Sie durch 123 als Trennzeichen erforderlich.