Bir Dizeyi uzaya bölme


329

Dizimi boşluklarla ayırmam gerekiyor. Bunun için denedim:

str = "Hello I'm your String";
String[] splited = str.split(" ");

Ama işe yaramıyor gibi görünüyor.


3
İyi görünüyor ... 'splited' dizisindeki değerler nelerdir?
npinti

1
Kodunuz gerçekten olduğu gibi çalışır. IdeOne.com adresinde canlı olarak çalıştırılan koda bakın .
Basil Bourque

@BasilBourque - Bu bağlantıda herhangi bir çalıştırma düğmesi bulamadım
nanosoft

1
@nanosoft IdeOne.com adresindeki sayfa yüklendikten sonra otomatik olarak çalışır. Stdout bölümündeki kodun altındaki çıkışa bakın. Kodu değiştirmek için forksol üst köşeye yakın bağlantıyı tıklayın .
Basil Bourque

Yanıtlar:


639

Sahip olduklarınız çalışmalı. Ancak, sağlanan alanlar varsayılan olarak ... başka bir şey için? Boşluk normal ifadesini kullanabilirsiniz:

str = "Hello I'm your String";
String[] splited = str.split("\\s+");

Bu, herhangi bir sayıda ardışık boşluğun dizenizi belirteçlere ayırmasına neden olur.

Bir yan not olarak, "splited" bir kelime olduğundan emin değilim :) Bir split kurbanı olma durumu da "split" olduğuna inanıyorum. Bu zor gramer şeylerden biri :-) Seçici olmaya çalışmıyorum, sadece geçeceğini düşündüm!


45
Ben ne bekliyordum İsviçre, benim ingilizce en iyi değil; P, neyse thx çalıştı!
safari

29
:-) Hey, büyük değil. Bazı saçma değişken isimleri kullandım (kodda muhtemelen yaşamaya izin vermemeliydim!) Ben sadece küçük bir trivia geçirerek gramer nazi ya da başka bir şey olmaya çalışmıyordum.
corsiKa

7
@Safari, sadece 1 büyük fiyat 2 büyük tavsiye var. Sadece şaka. Mükemmel cevap.
Nirmal Mangal

8
"Ne çalışması gerekir" Benim kod kırıldığında oldukça sık benzer bir şey söylüyorum.
Griffin

1
Kullanım durumum dize bölmek ve birden çok boşluk kaldırmak olduğu için yararlı buluyorum. Bir kod satırı her ikisini de benim için yapar.
Niharika Upadhyay

87

Kabul edilen cevap iyi olsa da, giriş dizeniz beyaz boşlukla başlıyorsa önde gelen bir boş dizeyle sonuçlanacağınızı unutmayın. Örneğin:

String str = " Hello I'm your String";
String[] splitStr = str.split("\\s+");

Sonuç:

splitStr[0] == "";
splitStr[1] == "Hello";
splitStr[2] == "I'm";
splitStr[3] == "Your";
splitStr[4] == "String";

Böylece dizenizi bölmeden önce kırpmak isteyebilirsiniz:

String str = " Hello I'm your String";
String[] splitStr = str.trim().split("\\s+");

29

Str.split parantezlerine düzenli bir ifade koymanın sorunu çözmesi gerektiğine inanıyorum. Java String.split () yöntemi düzenli ifadelere dayanır, böylece ihtiyacınız olan şey:

str = "Hello I'm your String";
String[] splitStr = str.split("\\s+");

12

Stringutils.split()Dizeyi beyazlarla ayırmak için kullanın . Örneğin StringUtils.split("Hello World"), "Merhaba" ve "Dünya" yı döndürür;

Bahsedilen vakayı çözmek için böyle bir split yöntemi kullanıyoruz

String split[]= StringUtils.split("Hello I'm your String");

bölünmüş diziyi yazdırdığımızda çıktı:

Merhaba

Ben

sizin

sicim

Örnek demo için buradan kontrol edin



6

bir şekilde String split yöntemini kullanmak istemiyorsanız Java'da StringTokenizer sınıfını şu şekilde kullanabilirsiniz:

    StringTokenizer tokens = new StringTokenizer("Hello I'm your String", " ");
    String[] splited = new String[tokens.countTokens()];
    int index = 0;
    while(tokens.hasMoreTokens()){
        splited[index] = tokens.nextToken();
        ++index;
    }

ArrayIndexOutofBounds İstisnası fırlatma olasılığı vardır.
Ajay Takur

2
Hayır, bu "ArrayIndexOutofBounds" atmaz çünkü ben String'de bulunan belirteç sayısına göre dizi boyutu bildirir. bu, dizinin boyutunun bir dizede alınan belirteçlerden fazla olmayacağından emin olur.
Muhammad Suleman

6

Bunu dene

    String str = "This is String";
    String[] splited = str.split("\\s+");

    String split_one=splited[0];
    String split_second=splited[1];
    String split_three=splited[2];

   Log.d("Splited String ", "Splited String" + split_one+split_second+split_three);

4

Alternatif bir yol:

import java.util.regex.Pattern;

...

private static final Pattern SPACE = Pattern.compile(" ");
String[] arr = SPACE.split(str); // str is the string to be split

Burada gördüm


3

Tamam, bu yüzden genelleme yapacağım cevabı aldığınızda bölme yapmak zorundayız.

Herhangi bir dizeyi boşluklara bölmek istiyorsanız, ayırıcı (özel karakter).

İlk olarak, sorunların çoğunu oluştururken önde gelen alanı kaldırın.

str1 = "    Hello I'm your       String    ";
str2 = "    Are you serious about this question_  boy, aren't you?   ";

Önce boşluk, sekme vb. Olabilen ön boşluğu kaldırın.

String s = str1.replaceAll("^\\s+","");//starting with whitespace one or more

Şimdi boşluk veya herhangi bir özel karakter bölmek istiyorsanız.

String[] sa = s.split("[^\\w]+");//split by any non word char

Ancak w, [a-zA-Z_0-9] içerdiğinden, alt çizgi (_) ile bölmek istiyorsanız

 String[] sa = s.split("[!,? ._'@]+");//for str2 after removing leading space

Bu replaceAll("^\\s+","")benim günümü kurtardı. Benim durumumda işe yaradı. Teşekkür ederim
Kostas Asargiotakis

2

Aşağıda Çok Basit Örnek:

Umarım yardımcı olur.

String str = "Hello I'm your String";
String[] splited = str.split(" ");
var splited = str.split(" ");
var splited1=splited[0]; //Hello
var splited2=splited[1]; //I'm
var splited3=splited[2]; //your
var splited4=splited[3]; //String

1

Aşağıdaki kodu kullanarak dizeyi kullanabilirsiniz

   String thisString="Hello world";

   String[] parts = theString.split(" ");

   String first = parts[0];//"hello"

    String second = parts[1];//"World"

0

Burada, "," veya beyaz boşluk içeren bir Dizeyi kırpmanın yöntemi

private String shorterName(String s){
        String[] sArr = s.split("\\,|\\s+");
        String output = sArr[0];

        return output;
    }

0

Bu yanıtların yayınlanmasından bu yana bir süre geçtiğinden, sorulanları yapmanın başka bir yolu daha:

List<String> output = new ArrayList<>();
try (Scanner sc = new Scanner(inputString)) {
    while (sc.hasNext()) output.add(sc.next());
}

Şimdi dizelerin bir listesi var (tartışmasız bir diziden daha iyidir); Eğer bir diziye ihtiyacınız varsa,output.toArray(new String[0]);


0

Sadece beyaz boşluk değil, aynı zamanda çözümüm de görünmez karakterleri de çözüyor.

str = "Hello I'm your String";
String[] splited = str.split("\p{Z}");

-1

Space ile String Spit Basit

    String CurrentString = "First Second Last";
    String[] separated = CurrentString.split(" ");

    for (int i = 0; i < separated.length; i++) {

         if (i == 0) {
             Log.d("FName ** ", "" + separated[0].trim() + "\n ");
         } else if (i == 1) {
             Log.d("MName ** ", "" + separated[1].trim() + "\n ");
         } else if (i == 2) {
             Log.d("LName ** ", "" + separated[2].trim());
         }
     }
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.