2012-05-17 8 views
145

Ich habe einen String mit einer unbekannten Länge, das so etwas wie dieseWie wird eine kommaseparierte Zeichenfolge aufgeteilt?

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

sieht Was der optimale Weg wäre, diese Zeichenfolge an den Kommas zu teilen, so dass jedes Wort ein Element einer Arraylist werden könnte?

Zum Beispiel

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 Methode Split ("Split Char") es teilt Ihre Zeichenfolge Nad Methode wird String-Array mit geteilten Wörtern erstellen. – Sajmon

Antwort

237

Sie können dies tun:

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

Grundsätzlich ist die .split() Methode wird die Zeichenfolge nach (in diesem Fall) aufgeteilt Begrenzer Sie vorbei und wird wieder eine Reihe von Saiten.

Es scheint jedoch, dass Sie nach einer Liste von Strings und nicht nach einem Array suchen. Daher muss das Array mithilfe des Dienstprogramms Arrays.asList() in eine Liste umgewandelt werden. So wie ein FYI könnte man auch so etwas wie dies tun:

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

Aber es ist in der Regel eine bessere Praxis zu einer Schnittstelle zu programmieren, anstatt eine tatsächliche konkrete Umsetzung, also würde ich die erste Option empfehlen.

+0

@JamesFazio: Die '.split' Methode ist eine der praktischsten Methoden in der String-Klasse, ich würde empfehlen, dass Sie den Link für die JavaDocs, die ich in meiner Antwort enthalten habe;). – npinti

+0

Danke für die sehr gründliche Antwort! –

+9

Beachten Sie, dass dies die Werte nicht trimmen wird, also wird strings.get (1) "cat" nicht "cat" – Alb

124

Nun, Sie möchten Split, richtig?

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

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

Wenn Sie zusätzlich loswerden Leerzeichen um Artikel:

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

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

+0

@npinti: yep, +1 zu dir, du warst schneller und ich wollte dein 'Arrays.asList()' Idiom nicht kopieren. –

+8

+1 großer Punkt über die Whitespace-Entfernung. – HDave

17

Eine kleine Verbesserung: oben genannten Lösungen nicht entfernen führende oder nachfolgende Leerzeichen in der eigentlichen String. Es ist besser, trim zu rufen, bevor Split aufgerufen wird. Statt dessen,

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

Verwendung

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

für die zweite Zeile, wenn wir trim() verwenden, brauchen wir keine Leerzeichen wie '(" \\ s *, \\ s * ")' 'nit' '(", ");' Dies führt zu gleichen Ergebnissen . –

+4

Ich bin mir nicht sicher, @WIZARD weil Trimm nur den linken und rechten Abstand der Zeichenfolge entfernen, aber nicht das Leerzeichen darin. Also wird die 'trim (" string, with, space ")' "string, with, space" 'sein. –

+0

@ThomasLeduc wenn string ist wie dieser '' hund, katze, bär, elefant, giraffe ''dann keine notwendigkeit von' trim() 'und in unserem fall wenn benutze' trim() 'dann out put wird' "string, with, space "' not this '" string, mit, space "' –

3

Zuerst kann man Namen wie dieser

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

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

gespalten

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

Ihre Tiere Und Sie wollen auch für den Zugriff auf Löschen Whitespaces und Komma um Tiernamen

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

Es gibt eine Funktion replaceAll() genannt, die alle Leerzeichen durch das Ersetzen sie mit dem, was Sie wollen, entfernen können.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]); 

Sie geben:

First:15.94, Second:16.01 
2

Zur Vollständigkeit der Guava Bibliothek, dann würden Sie tun: Splitter.on(",").split(“dog,cat,fox”)

Ein weiteres 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 ein Iterable zurück, also wenn Sie eine Liste benötigen, wickeln Sie sie ineinwie oben. Ansonsten gehen Sie einfach mit dem Iterable, zum Beispiel:

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

Beachten Sie, wie trimResults() alle Trimm Bedürfnisse Griffe ohne tweak regexes for corner cases zu haben, wie mit String.split().

Wenn Ihr Projekt Guava bereits verwendet, sollte dies Ihre bevorzugte Lösung sein. Weitere Informationen zur Konfiguration finden Sie in der Dokumentation zum Splitter unter Guava User Guide oder javadocs.

12

Sie können es geteilt und ein Array machen Zugriff dann wie Array

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

Sie wie

zugreifen können
String name1 = names[0]; 
String name2 = names[1]; 

oder mit Schleife

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

es hoffen, wird Ihnen helfen.

0

alle weißen Flecke entfernen und eine feste Größe oder unveränderliche Liste erstellen (siehe asListAPI docs)

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 möglich, auch replaceAll(\\s+", "") aber maximale Effizienz hängt von dem Anwendungsfall zu verwenden. (Siehe @GurselKoca answer zu Leerzeichen aus Entfernen von Strings in Java)

0

Sie so etwas wie dieses verwenden:

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

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

Auch Sie würden die Libs sind:

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

Kann versuche mit diesem für mich gearbeiteten

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

oder sonst

Verwandte Themen