Ich glaube, jeder verwendet oft die Split-Methode von String, aber sind Sie jemals auf die folgende Situation gestoßen:
Denken Sie an das Ausführungsergebnis des folgenden Codes
public static void main(String[] args) { // TODO Auto-generated method stub String str1 = "a,b,c,,,a"; String str2 = "a,b,c,,,"; String str3 = "a,b,c, , ,"; String[] s1 = str1.split(","); String[] s2 = str2.split(","); String[] s3 = str3.split(","); System.out.println("str1长度:"+s1.length); System.out.println("str2长度:"+s2.length); System.out.println("str3长度:"+s3.length); }
Ausführungsergebnis:
Warum tritt ein solches Ergebnis auf? Beim Durchsuchen der API wurde eine Lösung gefunden.
Lösung:
Durch Überprüfung In der API haben wir festgestellt, dass unsere häufig verwendete Split-Methode standardmäßig 0 übergibt. Die Lösung zur Lösung des Problems der leeren str2-Ausgabe besteht darin, den zweiten Parameter als negative Zahl zu übergeben, d. h.
public static void main(String[] args) { // TODO Auto-generated method stub String str1 = "a,b,c,,,a"; String str2 = "a,b,c,,,"; String str3 = "a,b,c, , ,"; String[] s1 = str1.split(","); String[] s2 = str2.split(",",-1); String[] s3 = str3.split(",",-1); System.out.println("str1长度:"+s1.length); System.out.println("str2长度:"+s2.length); System.out.println("str3长度:"+s3.length); }
Nachdem Durchsuchen der API wurde festgestellt, dass es in der String-Klasse zwei geteilte überladene Methoden gibt
1.public String[] split(String regex)
Gemäß der gegebener regulärer Ausdruck Match teilt diese Zeichenfolge.
Diese Methode verhält sich wie der Aufruf der Split-Methode mit zwei Argumenten mit dem angegebenen Ausdruck und dem Einschränkungsargument 0. Daher ist die abschließende leere Zeichenfolge nicht im resultierenden Array enthalten.
Zum Beispiel verwendet die Zeichenfolge „boo:and:foo“ diese Ausdrücke, um die folgenden Ergebnisse zu erzeugen:
Regex-Ergebnisse
: { "boo", "and", "foo" } o { "b", "", ":and:f" }
Parameter:
Regex – durch Trennzeichen getrennter regulärer Ausdruck
gibt zurück:
ein Array von Zeichenfolgen, das durch Aufteilen dieser Zeichenfolge basierend auf Übereinstimmungen mit dem angegebenen regulären Ausdruck bestimmt wird.
löst Folgendes aus:
PatternSyntaxException – Wenn die Syntax der regulärer Ausdruck ist ungültig
2.public String[] split(String regex,int limit)
Teilen Sie dieses Zeichen basierend auf der Übereinstimmung mit der angegebenen Zeichenfolge des regulären Ausdrucks auf.
Das von dieser Methode zurückgegebene Array enthält Teilzeichenfolgen dieser Zeichenfolge, von denen jede durch eine andere Teilzeichenfolge, die dem angegebenen Ausdruck entspricht, oder durch das Ende dieser Zeichenfolge abgeschlossen wird. Die Teilzeichenfolgen im Array werden in der Reihenfolge angeordnet, in der sie in dieser Zeichenfolge erscheinen. Wenn der Ausdruck mit keinem Teil der Eingabe übereinstimmt, enthält das resultierende Array nur ein Element, den String. Der Parameter
limit steuert die Häufigkeit, mit der das Muster angewendet wird, und wirkt sich somit auf die Länge des resultierenden Arrays aus. Wenn der Grenzwert n größer als 0 ist, wird das Muster höchstens n-1 Mal angewendet, die Länge des Arrays wird nicht größer als n sein und das letzte Element des Arrays enthält alle Eingaben über das letzte übereinstimmende Trennzeichen hinaus . Wenn n nicht positiv ist, wird das Muster so oft wie möglich angewendet und das Array kann eine beliebige Länge haben. Wenn n 0 ist, wird das Muster so oft wie möglich angewendet, das Array kann eine beliebige Länge haben und die abschließende leere Zeichenfolge wird verworfen.
Zum Beispiel erzeugt die Zeichenfolge „boo:and:foo“ unter Verwendung dieser Parameter das folgende Ergebnis:
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" }
Str.split ruft diese Methode auf Die Form (regex, n) erzeugt genau das gleiche Ergebnis wie der folgende Ausdruck:
Pattern.compile(regex).split(str, n)
Parameter:
regex – durch Trennzeichen getrennter regulärer Ausdruck
Limit – Ergebnisschwellenwert, wie oben
Rückgabe:
Array von Zeichenfolgen, aufgeteilt basierend auf Übereinstimmungen mit dem angegebenen regulären Ausdruck. Diese Zeichenfolge bestimmt
löst aus:
PatternSyntaxException – wenn die Syntax des regulären Ausdrucks ungültig ist
Ausführlichere Erklärungen zur Split-Methode von Java und verwandte Artikel finden Sie auf der chinesischen PHP-Website!