Virgülle ayrılmış bir dize nasıl bölünür?


203

Böyle bir şey görünüyor bilinmeyen bir uzunluğu olan bir dize var

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

Her dizenin bir ArrayList öğesi olabilmesi için bu dizeyi virgülle ayırmanın en iyi yolu ne olabilir?

Örneğin

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
yöntem split kullanın ("spliting char") bu dizenizi böler nad yöntemi bölünmüş kelimeler ile dize dizisi oluşturur.
Simon Dorociak

Yanıtlar:


344

Bunu yapabilirsin:

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

Temel olarak .split()yöntem, dizeyi geçtiğiniz (bu durumda) sınırlayıcıya göre böler ve bir dize dizisi döndürür.

Ancak, bir dizi yerine bir Dize Listesi peşinde gibi görünüyor, bu nedenle dizi Arrays.asList()yardımcı programı kullanılarak bir listeye dönüştürülmelidir . Tıpkı bir FYI gibi, böyle bir şey de yapabilirsiniz:

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

Ancak, gerçek bir somut uygulama yerine bir arayüze programlamak genellikle daha iyi bir uygulamadır, bu nedenle 1. seçeneği öneriyorum.


9
Bunun değerleri kırpmayacağını unutmayın. Strings.get (1) "kedi" değil "kedi" olacaktır
Alb

45
str.splitstr.split(",[ ]*");virgülden sonra virgül ve boşlukları kaldırabilmeniz için normal ifadeyi kabul eder .
vertti

4
Virgülle ayrılmış bir dosyada (csv) tırnak işaretleri arasında virgül olabilir, yani bu bir sınırlayıcı değildir. Bu durumda Split çalışmaz.
Steven Trigg

2
İkinci seçenek, oyuncu olarak kullanılmasını gerektirir ArrayList<String>.
C_B

3
Boş girişleri tutmanız gerekiyorsa (örneğin, tutarlı dizi uzunluğu için) stackoverflow.com/questions/14602062/…
Fast Engy

157

Eh, istediğiniz bölünmüş sağ?

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

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

Ek olarak öğelerin etrafındaki boşluklardan kurtulmak istiyorsanız:

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

Evet bu çözümün bir parçası. OP bir dizi değil, bir Dize Listesi sonra görünüyor.
npinti

@npinti: evet, sana +1, daha hızlı davrandın ve Arrays.asList()deyiminizi kopyalamak istemedim .
Tomasz Nurkiewicz

1
10 saat düşünmeye devam ettim, sonra SO'yu aradım. .split () işleminin çok kolay olduğunu bilmiyordum;
DeathRs

Ortaya çıkan bölünmüş öğeleri bir Dizi yerine bir kümede saklamak isterseniz ne olur?
Moses Kirathe

29

Onu bölebilir ve bir dizi yapabilir ve dizi gibi erişebilirsiniz

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

gibi erişebilirsin

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

veya döngü kullanarak

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

size yardımcı olacağını umuyoruz.


18

Küçük bir gelişme: yukarıdaki çözümler, gerçek Dize'deki önde gelen veya arkadaki boşlukları kaldırmaz. Split çağırmadan önce trim çağırmak daha iyidir. Bunun yerine,

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

kullanım

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

1
ikinci satırınız için, eğer trim () kullanırsak, boşluk ("\\s*,\\s*")kullanmanıza gerek yok, tıpkı (",");bunun aynı sonuçları kullanacağı gibi .
SİHİRBAZ

5
Bu @ WIZARD emin değilim çünkü trim sadece dize sol ve sağ boşluk kaldırmak, ama içindeki boşluk değil. Öyleyse trim(" string, with , space ")olacak "string, with , space".
Thomas Leduc

Dizesi şu şekilde ise @ThomasLeduc "dog, cat, bear, elephant, giraffe"sonra gerek trim()ur durumda ve kullanım eğer trim()o zaman koymak çıkacak "string,with,space"değil bu"string, with , space"
SİHİRBAZ

trim()dizenin sadece sol ve sağ boşluğunu değil tüm boşlukları kaldıracak
WIZARD

5
Test ediyor musun? çünkü sadece bir program java ve string " string, with , space ".trim()dönüşü yazdım "string, with , space". Javadoc'un dediği gibi: dizenin bir kopyasını döndürür, baştaki ve sondaki boşluk atlanır. Yanılıyorsunuz ve @ user872858 haklı.
Thomas Leduc

3

Önce böyle isimleri bölebilirsiniz

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

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

hayvanlara erişmek için

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

Ve ayrıca hayvan adlarının çevresindeki beyaz boşlukları ve virgülleri kaldırmak istiyorsunuz

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

3

Tamlık için, Guava kütüphanesini kullanarak şunları yapabilirsiniz: Splitter.on(",").split(“dog,cat,fox”)

Başka bir örnek:

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()Yinelenebilir bir değer döndürür, bu nedenle bir Listeye ihtiyacınız varsa Lists.newArrayList()yukarıdaki listeye ekleyin . Aksi takdirde Yinelenebilir ile gidin, örneğin:

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

Not nasıl trimResults()kolları tüm senin zorunda kalmadan ihtiyaçlarını kırparak köşe durumlar için Regexes çimdik gibi, String.split().

Projeniz zaten Guava kullanıyorsa, bu tercih ettiğiniz çözüm olmalıdır. Daha fazla yapılandırma seçeneği için Guava Kullanıcı Kılavuzu'ndaki Splitter belgelerine veya javadoc'lara bakın.


2

Bu benim için çalıştı ile deneyebilirsiniz

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

ya da başka

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

1

build.gradle içinde Guava ekle

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

ve sonra

    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);
    }

zevk almak :)


0

Tüm beyaz boşlukları kaldırın ve sabit boyutlu veya değişmez bir Liste oluşturun ( asList API belgelerine bakın )

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

Kullanmak da mümkündür replaceAll(\\s+", "")ancak maksimum verimlilik kullanım durumuna bağlıdır. (@GurselKoca bkz cevabı için Java dizeleri boşluk Çıkarma )


0

Bunun gibi bir şey kullanabilirsiniz:

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

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

Ayrıca, kütüphaneleri dahil edersiniz:

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


0

Kotlin'de,

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

burada stringArrayolduğu List<String>ve commasStringbir Stringvirgül ve boşluklarla


0

Bu, dizeyi virgülle ayırmanın kolay bir yoludur,

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);
 }
}

JDK için kullandığım bu kod. Ve diziyi yazdırmanız gerekiyorsa. System.out.println kullanın
Sandun Susantha

-1

replaceAll()Tüm beyaz alanları istediğiniz gibi değiştirerek kaldırabilecek bir işlev var . Örnek olarak

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

sana vereceğim:

First:15.94, Second:16.01
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.