Bir dizeyi sınırlayıcı olarak herhangi bir boşluk karakteriyle bölme


555

Ne regex desen geçirilecek I gerekir java.lang.String.split() tüm boş karakterleri (kullanarak alt dizelerin bir Array içine bir Dize bölmek ' ', '\t', '\n'sınırlayıcı olarak, vs.)?

Yanıtlar:


955

Satırlarında bir şey

myString.split("\\s+");

Bu, tüm beyaz boşlukları sınırlayıcı olarak gruplandırır.

Dize varsa:

"Hello[space][tab]World"

Bu dizeleri vermelidir "Hello"ve "World"arasındaki boşluk ihmal [space]ve [tab].

VonC belirttiği gibi Java ilk özel karakter dizesi kaçmayı deneyin ve göndermek çünkü, ters eğik çizgi kaçan edilmelidir olduğu çözümlenmesi mümkündür. Ne istiyorsan, değişmezdir "\s", yani geçmen gerekir "\\s". Biraz kafa karıştırıcı olabilir.

\\sEşdeğerdir [ \\t\\n\\x0B\\f\\r].


1
Bu hatırlatma için teşekkürler. Kalçadan kod yazıyordum :)
Henrik Paul

34
trim()İlk önce şunları yapmanız gerektiğine dikkat edin : trim().split("\\s++")- aksi takdirde, örneğin abc'yi bölmek önce iki boş dize yayar.
Marcus Junius Brutus

Cevabınızın sonuna neden dört ters eğik çizgi kullandınız? yani. "\\\\s"?
Michael Borkowski

"" .trim (). split ("\\ s +") - boş dize bölünmesi size 1 uzunluğu verir. "term" .trim (). split ("\\ s +") - ayrıca 1 uzunluğu verir .
PaulSchell

88

Çoğu regex lehçelerinde, bu tür bir şey için kullanabileceğiniz bir dizi uygun karakter özeti vardır - bunlar hatırlanması gereken iyi şeylerdir:

\w - Herhangi bir kelime karakteriyle eşleşir.

\W - Herhangi bir kelime olmayan karakterle eşleşir.

\s - Herhangi bir boşluk karakteriyle eşleşir.

\S - Boşluk karakterleri dışında herhangi bir şeyle eşleşir.

\d - Herhangi bir rakamla eşleşir.

\D - Rakamlar dışında herhangi bir şeyle eşleşir.

"Regex Cheatsheets" araması, bir sürü yararlı özetlerle ödüllendirilmelidir.



Desen sınıfı JavaDoc'u
Christophe Roussy

64

Javascript'te bu çalışmayı sağlamak için aşağıdakileri yapmak zorunda kaldım:

myString.split(/\s+/g)

15
Bu Javascript dilinde. Ben de dikkat
etmedim

14
Hata. Benim hatam. Belki de bu cevap bir Javascript cevabı ararken bu konuya rastlayan bazılarına hala yardımcı olacaktır. :-)
Mike Manard

Haha JavaScript için bir cevap arıyordum, yanlışlıkla bu soruya rastladım ve gitmeden önce cevabınızı fark ettim. +1.
Kris

Bu harika! Yanlış soruyu cevaplasa bile bu cevabın birisi için yararlı olduğunu duyduğuma sevindim. :-)
Mike Manard

Bu da bana çok yardımcı oldu, sunucu args bölmek için gerekli :)
ProgrammerPlays


11

Ayrıca bir UniCode kırılma alanı xA0 olabilir ...

String[] elements = s.split("[\\s\\xA0]+"); //include uniCode non-breaking

bu bana yardımcı oluyor!
Surasin Tancharoen

10
String string = "Ram is going to school";
String[] arrayOfString = string.split("\\s+");

@Stephan bunları görmedim.
Ok


2

Düzenli bir ifade olduğundan ve u'nun da boşluklarla çevrelenmiş virgül, nokta vb. olmalı:

myString.split(/[\s\W]+/)

1

aşağıdaki ifadeyi kullanarak bir dizeyi satır sonuna bölebilirsiniz:

 String textStr[] = yourString.split("\\r?\\n");

aşağıdaki ifadeyi kullanarak bir dizeyi Whitespace'e bölebilirsiniz:

String textStr[] = yourString.split("\\s+");


-1

Bu kodu inceleyin .. iyi şanslar

    import java.util.*;
class Demo{
    public static void main(String args[]){
        Scanner input = new Scanner(System.in);
        System.out.print("Input String : ");
        String s1 = input.nextLine();   
        String[] tokens = s1.split("[\\s\\xA0]+");      
        System.out.println(tokens.length);      
        for(String s : tokens){
            System.out.println(s);

        } 
    }
}

Lütfen cevabınızı detaylandırabilir misiniz?
Stephan
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.