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.
James Fazio
quelle
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.

npinti
quelle
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*");
Tomasz Nurkiewicz
quelle
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.

Prappo Islam Prince
quelle
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*");
user872858
quelle
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*");
Hash
quelle
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 .

Jonik
quelle
2

Kann versuchen, damit hat bei mir funktioniert

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

oder aber

if (sg.endsWith(",")) {
                    sg = sg.substring(0, sg.length() - 1);
                }
Tarit Ray
quelle
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 :)

panayot_kulchev_bg
quelle
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. )

sdc
quelle
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;
Diego Cortes
quelle
0

Benutze das :

        List<String> splitString = (List<String>) Arrays.asList(jobtype.split(","));
Abhishek Sengupta
quelle
0

In Kotlin,

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

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

Kishan Solanki
quelle
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);
 }
}
Sandun Susantha
quelle
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
Mawhrin-Skel
quelle