Wie teile ich eine durch Kommas getrennte Zeichenfolge?


202

Ich habe einen String mit einer unbekannten Länge, der ungefähr so ​​aussieht

"dog, cat, bear, elephant, ..., giraffe"

Was wäre der optimale Weg, um diese Zeichenfolge durch Kommas zu teilen, damit jedes Wort ein Element einer ArrayList wird?

Beispielsweise

List<String> strings = new ArrayList<Strings>();
// Add the data here so strings.get(0) would be equal to "dog",
// strings.get(1) would be equal to "cat" and so forth.

1
Verwenden Sie die Methode split ("splitting char"). Sie teilt Ihre Zeichenfolge auf. Die nad-Methode erstellt ein Zeichenfolgenarray mit geteilten Wörtern.
Simon Dorociak

Antworten:


342

Sie könnten dies tun:

String str = "...";
List<String> elephantList = Arrays.asList(str.split(","));

Grundsätzlich .split()teilt die Methode die Zeichenfolge nach dem von Ihnen übergebenen Trennzeichen (in diesem Fall) auf und gibt ein Array von Zeichenfolgen zurück.

Sie scheinen jedoch eher nach einer Liste von Zeichenfolgen als nach einem Array zu suchen, daher muss das Array mithilfe des Arrays.asList()Dienstprogramms in eine Liste umgewandelt werden . Genau wie zu Ihrer Information könnten Sie auch so etwas tun:

String str = "...";
ArrayList<String> elephantList = new ArrayList<>(Arrays.asList(str.split(","));

In der Regel ist es jedoch besser, auf eine Schnittstelle als auf eine konkrete Implementierung zu programmieren. Daher würde ich die erste Option empfehlen.


9
Denken Sie daran, dass dies die Werte nicht trimmt, so dass strings.get (1) "cat" und nicht "cat" ist
Alb

45
str.splitAkzeptiert Regex, damit Sie str.split(",[ ]*");Kommas und Leerzeichen nach Kommas entfernen können.
Vertti

4
Eine durch Kommas getrennte Datei (csv) enthält möglicherweise ein Komma in Anführungszeichen, was bedeutet, dass es sich nicht um ein Trennzeichen handelt. In diesem Fall funktioniert Split nicht.
Steven Trigg

2
Die zweite Option erfordert als Besetzung zu ArrayList<String>.
C_B

3
Wenn Sie leere Einträge behalten müssen (z. B. für eine konsistente Array-Länge), verwenden Sie split (",", - 1) gemäß stackoverflow.com/questions/14602062/…
Fast Engy

157

Nun, Sie wollen Split , nicht wahr?

String animals = "dog, cat, bear, elephant, giraffe";

String[] animalsArray = animals.split(",");

Wenn Sie zusätzlich Leerzeichen um Elemente entfernen möchten:

String[] animalsArray = animals.split("\\s*,\\s*");

Ja, das ist Teil der Lösung. Das OP scheint nach einer Liste von Strings zu sein, nicht nach einem Array.
Npinti

@npinti: Ja, +1 für dich, du warst schneller und ich wollte deine Arrays.asList()Redewendung nicht kopieren .
Tomasz Nurkiewicz

1
Ich dachte 10 Stunden lang nach und suchte dann SO. wusste nicht, dass es so einfach ist, .split ();
DeathRs

Was ist, wenn Sie die resultierenden geteilten Elemente in einem Satz anstatt in einem Array speichern möchten?
Moses Kirathe

29

Sie können es teilen und ein Array erstellen und dann auf ein ähnliches Array zugreifen

String names = "prappo,prince";
String[] namesList = names.split(",");

Sie können gerne darauf zugreifen

String name1 = namesList [0];
String name2 = namesList [1];

oder mit Schleife

for(String name : namesList){
System.out.println(name);
}

hoffe es wird dir helfen.


18

Eine kleine Verbesserung: Die obigen Lösungen entfernen keine führenden oder nachfolgenden Leerzeichen in der tatsächlichen Zeichenfolge. Es ist besser, Trim aufzurufen, bevor Sie Split aufrufen. An Stelle von,

 String[] animalsArray = animals.split("\\s*,\\s*");

verwenden

 String[] animalsArray = animals.trim().split("\\s*,\\s*");

1
Wenn wir für Ihre zweite Zeile trim () verwenden, benötigen wir keine Leerzeichenaufteilung ("\\s*,\\s*"), da (",");dies nur zu denselben Ergebnissen führt.
WIZARD

5
Ich bin mir bei @WIZARD nicht sicher, da beim Trimmen nur der linke und rechte Bereich der Zeichenfolge entfernt wird, nicht jedoch der Bereich darin. So trim(" string, with , space ")wird das sein "string, with , space".
Thomas Leduc

@ThomasLeduc wenn Zeichenfolge so ist, "dog, cat, bear, elephant, giraffe"dann keine Notwendigkeit trim()und in Ihrem Fall, wenn Verwendung, trim()dann "string,with,space""string, with , space"
Ausgabe

trim()entfernt alle Leerzeichen, nicht nur das linke und rechte Leerzeichen der Zeichenfolge
WIZARD

5
Testest du es weil ich gerade ein Programm Java geschrieben habe und der String " string, with , space ".trim()zurückkehrt "string, with , space". Wie javadoc sagt: Gibt eine Kopie der Zeichenfolge zurück, wobei führende und nachfolgende Leerzeichen weggelassen werden. Sie liegen falsch und @ user872858 ist richtig.
Thomas Leduc

3

Zuerst können Sie Namen wie diese teilen

String animals = "dog, cat, bear, elephant,giraffe";

String animals_list[] = animals.split(",");

Zugang zu Ihren Tieren

String animal1 = animals_list[0];
String animal2 = animals_list[1];
String animal3 = animals_list[2];
String animal4 = animals_list[3];

Außerdem möchten Sie Leerzeichen und Kommas um Tiernamen entfernen

String animals_list[] = animals.split("\\s*,\\s*");

3

Der Vollständigkeit halber würden Sie mit der Guava- Bibliothek Folgendes tun: Splitter.on(",").split(“dog,cat,fox”)

Ein anderes Beispiel:

String animals = "dog,cat, bear,elephant , giraffe ,  zebra  ,walrus";
List<String> l = Lists.newArrayList(Splitter.on(",").trimResults().split(animals));
// -> [dog, cat, bear, elephant, giraffe, zebra, walrus]

Splitter.split()Gibt eine Iterable zurück. Wenn Sie also eine Liste benötigen, wickeln Sie sie Lists.newArrayList()wie oben beschrieben ein. Ansonsten einfach mit dem Iterable gehen, zum Beispiel:

for (String animal : Splitter.on(",").trimResults().split(animals)) {
    // ...
}

Beachten Sie, wie trimResults()alle Ihre Trimmanforderungen erfüllt werden , ohne dass Regexe für Eckfälle wie bei angepasst werden müssen String.split().

Wenn Ihr Projekt bereits Guava verwendet, sollte dies Ihre bevorzugte Lösung sein. Weitere Konfigurationsoptionen finden Sie in der Splitter-Dokumentation im Guava-Benutzerhandbuch oder in den Javadocs .


2

Kann versuchen, damit hat bei mir funktioniert

 sg = sg.replaceAll(", $", "");

oder aber

if (sg.endsWith(",")) {
                    sg = sg.substring(0, sg.length() - 1);
                }

1

In build.gradle füge Guave hinzu

    compile group: 'com.google.guava', name: 'guava', version: '27.0-jre'

und dann

    public static List<String> splitByComma(String str) {
    Iterable<String> split = Splitter.on(",")
            .omitEmptyStrings()
            .trimResults()
            .split(str);
    return Lists.newArrayList(split);
    }

    public static String joinWithComma(Set<String> words) {
        return Joiner.on(", ").skipNulls().join(words);
    }

genießen :)


0

Entfernen Sie alle Leerzeichen und erstellen Sie eine Liste mit fester Größe oder unveränderlicher Größe (siehe asList API-Dokumente ).

final String str = "dog, cat, bear, elephant, ..., giraffe";
List<String> list = Arrays.asList(str.replaceAll("\\s", "").split(","));
// result: [dog, cat, bear, elephant, ..., giraffe]

Es ist auch möglich zu verwenden, replaceAll(\\s+", "")aber die maximale Effizienz hängt vom Anwendungsfall ab. (Siehe @ GurselKoca- Antwort zum Entfernen von Leerzeichen aus Zeichenfolgen in Java. )


0

Sie können so etwas verwenden:

String animals = "dog, cat, bear, elephant, giraffe";

List<String> animalList = Arrays.asList(animals.split(","));

Außerdem würden Sie die Bibliotheken einschließen:

import java.util.ArrayList;
import java.util.Arrays; 
import java.util.List;


0

In Kotlin,

val stringArray = commasString.replace(", ", ",").split(",")

wo stringArrayist List<String>und commasStringist Stringmit Kommas und Leerzeichen


0

Dies ist eine einfache Möglichkeit, Zeichenfolgen durch Komma zu teilen.

import java.util.*;

public class SeparatedByComma{
public static void main(String []args){
     String listOfStates = "Hasalak, Mahiyanganaya, Dambarawa, Colombo";
     List<String> stateList = Arrays.asList(listOfStates.split("\\,"));
     System.out.println(stateList);
 }
}

Diesen Code habe ich für JDK verwendet. Und wenn Sie das Array drucken müssen. benutze System.out.println
Sandun Susantha

-1

Es gibt eine Funktion namens replaceAll(), die alle Leerzeichen entfernen kann, indem sie durch beliebige ersetzt werden. Als Beispiel

String str="  15. 9 4;16.0 1"
String firstAndSecond[]=str.replaceAll("\\s","").split(";");
System.out.println("First:"+firstAndSecond[0]+", Second:"+firstAndSecond[1]);

werde dir geben:

First:15.94, Second:16.01
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.