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.