Split String nur in erster Instanz - Java

145

Ich möchte einen String durch '=' charecter teilen. Aber ich möchte, dass es nur in erster Instanz aufgeteilt wird. Wie kann ich das machen ? Hier ist ein JavaScript-Beispiel für '_' char, aber es funktioniert bei mir nicht, wenn die Zeichenfolge nur bei der ersten Instanz des angegebenen Zeichens geteilt wird

Beispiel:

apple=fruit table price=5

Wenn ich String.split versuche ('='); es gibt

[apple],[fruit table price],[5]

Aber ich brauche

[apple],[fruit table price=5]

Vielen Dank

Dracula
quelle
Du musst nicht entkommen =.
Rohit Jain

Antworten:

281
string.split("=", 2);

Wie String.split(java.lang.String regex, int limit)erklärt:

Das von dieser Methode zurückgegebene Array enthält jede Teilzeichenfolge dieser Zeichenfolge, die durch eine andere Teilzeichenfolge abgeschlossen wird, die dem angegebenen Ausdruck entspricht, oder durch das Ende der Zeichenfolge abgeschlossen wird. Die Teilzeichenfolgen im Array befinden sich in der Reihenfolge, in der sie in dieser Zeichenfolge vorkommen. Wenn der Ausdruck keinem Teil der Eingabe entspricht, enthält das resultierende Array nur ein Element, nämlich diese Zeichenfolge.

Der limitParameter steuert, wie oft das Muster angewendet wird, und wirkt sich daher auf die Länge des resultierenden Arrays aus. Wenn der Grenzwert n größer als Null ist, wird das Muster höchstens n - 1 Mal angewendet , die Länge des Arrays ist nicht größer als n , und der letzte Eintrag des Arrays enthält alle Eingaben über das zuletzt übereinstimmende Trennzeichen hinaus.

Die Zeichenfolge boo:and:fooliefert beispielsweise mit diesen Parametern die folgenden Ergebnisse:

Regex Limit    Result
:     2        { "boo", "and:foo" }
:     5        { "boo", "and", "foo" }
:    -2        { "boo", "and", "foo" }
o     5        { "b", "", ":and:f", "", "" }
o    -2        { "b", "", ":and:f", "", "" }
o     0        { "b", "", ":and:f" }
Zaheer Ahmed
quelle
1
Es ist verwirrend zu verstehen, aber es funktioniert einfach! Vielen Dank!
Clint Eastwood
4
Einige Erläuterungen: Limit 2 gibt eine Liste der AT MOST 2-Elemente zurück. Es kann eine Liste mit 1 Element zurückgeben, wenn keine Übereinstimmung mit dem Ausdruck vorliegt. Wenn der Ausdruck zwei Übereinstimmungen enthält, wird das zweite Element des zurückgegebenen Arrays nicht aufgeteilt.
modle13
11

Ja, Sie können einfach den Integer-Parameter an die Split-Methode übergeben

String stSplit = "apple=fruit table price=5"

stSplit.split("=", 2);

Hier ist eine Java-Dokumentreferenz: String # split (java.lang.String, int)

codeMan
quelle
5

Wie viele andere Antworten den Limit-Ansatz nahe legen, kann dies ein anderer Weg sein

Sie können die indexOf- Methode für String verwenden, die das erste Vorkommen des angegebenen Zeichens zurückgibt. Mit diesem Index können Sie die gewünschte Ausgabe erhalten

String target = "apple=fruit table price=5" ;
int x= target.indexOf("=");
System.out.println(target.substring(x+1));
Siva
quelle
2
Dies teilt nicht, sondern extrahiert den zweiten Teil. Für den ersten Teil wäre noch eine weitere Codezeile erforderlich ... 4 Zeilen vs. 1 = Daumen runter
Clint Eastwood
0

Versuchen Sie diesen Code ...

Es funktioniert.

public class Split
{
    public static void main(String...args)
    {
        String a = "%abcdef&Ghijk%xyz";
        String b[] = a.split("%", 2);

        System.out.println("Value = "+b[1]);
    }
}
Bhola
quelle
0
String string = "This is test string on web";
String splitData[] = string.split("\\s", 2);

Result ::
splitData[0] =>  This
splitData[1] =>  is test string  


String string = "This is test string on web";
String splitData[] = string.split("\\s", 3);

Result ::
splitData[0] =>  This
splitData[1] =>  is
splitData[1] =>  test string on web

Standardmäßig erstellen die Split-Methoden n Arrays auf der Grundlage des angegebenen regulären Ausdrucks. Wenn Sie jedoch die Anzahl der nach einem Split zu erstellenden Arrays einschränken möchten, übergeben Sie das zweite Argument als ganzzahliges Argument.

Kailash Karki
quelle
3
Was war das Problem? Fügen Sie weitere Details hinzu, um Ihre Antwort selbsterklärend zu machen!
Paresh Mayani
-2
String[] func(String apple){
String[] tmp = new String[2];
for(int i=0;i<apple.length;i++){
   if(apple.charAt(i)=='='){
      tmp[0]=apple.substring(0,i);
      tmp[1]=apple.substring(i+1,apple.length);
      break;
   }
}
return tmp;
}
//returns string_ARRAY_!

Ich schreibe gerne eigene Methoden :)

Martin Košťál
quelle
3
Diese Methode ist nicht allzu nützlich, da das Trennzeichen fest codiert ist. Darüber hinaus bringt die Implementierung der linearen Suche mit einer for-Schleife keinen Vorteil gegenüber der Verwendung von String.indexOf, um die Position des ersten Trennzeichens zu finden. Drittens ist es nicht intuitiv zu sehen, wie viele String-Elemente zurückgegeben werden. Wenn wir über das Aufteilen von Dingen in zwei Teile sprechen, sollten Sie den Datentyp Pair <String, String> verwenden, der genau zwei Zeichenfolgen darstellt, anstatt ein Array zu erstellen.
Gee Bee