Jak podzielić ciąg znaków z białymi znakami jako ogranicznikami?

Jaki wzorzec regex musi przekazać do metody java.lang.String.split(), aby podzielić łańcuch na tablicę podłańcuchów używając wszystkich białych znaków (' ', '\t', '\n', itd.) jako ogranicznik?

Author: JNYRanger, 2008-10-22

12 answers

Coś w linii

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

Grupuje wszystkie białe spacje jako ogranicznik.

Więc jeśli mam ciąg:

"Hello[space][tab]World"

Powinno to dawać ciągi "Hello" i "World" i pomijać pustą przestrzeń pomiędzy [space] i [tab].

Jak zauważył VonC, odwrotny ukośnik powinien być unikany, ponieważ Java najpierw spróbuje uciec od łańcucha znaków do znaku specjalnego i wysłać ten do przetworzenia. Czego chcesz, to literalne "\s", które oznacza, że musisz zdać "\\s". To może być trochę mylące.

\\s jest równoważne [ \\t\\n\\x0B\\f\\r]

 900
Author: Henrik Paul,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-15 19:09:12

W większości dialektów regex istnieje zestaw wygodnych podsumowań znaków, których możesz użyć do tego rodzaju rzeczy - są to dobre do zapamiętania:

\w - pasuje do każdego znaku słowa.

\W - Pasuje do dowolnych znaków bez słowa.

\s - pasuje do każdego znaku z białą spacją.

\S - Pasuje do wszystkiego, oprócz białych znaków.

\d - pasuje do każdej cyfry.

\D - pasuje do wszystkiego oprócz cyfr.

A search for " Regex Cheatsheets " powinny nagrodzić cię wieloma przydatnymi podsumowaniami.

 81
Author: glenatron,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-12 05:19:08

Aby to działało w Javascript, musiałem wykonać następujące czynności:

myString.split(/\s+/g)
 57
Author: Mike Manard,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-29 16:17:25

"\\S+ " powinno zadziałać

 35
Author: VonC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-22 11:29:25

Możesz również mieć niełamliwą spację UniCode xA0...

String[] elements = s.split("[\\s\\xA0]+"); //include uniCode non-breaking
 10
Author: jake_astub,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-09 03:29:23
String string = "Ram is going to school";
String[] arrayOfString = string.split("\\s+");
 9
Author: Arrow,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-31 18:54:35

Apache Commons Lang ma metodę dzielenia ciągu znaków białymi znakami jako ogranicznikami:

StringUtils.split("abc def")

Http://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html#split(java.lang.String)

To może być łatwiejsze w użyciu niż wzór regex.

 8
Author: Felix Scheffer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-01 17:10:18

Ponieważ jest to wyrażenie regularne i zakładam, że u również nie chce znaków nie alfanumerycznych, takich jak przecinki, kropki itp., które mogłyby być otoczone spacjami( np. "jeden, dwa" powinno dawać [jeden] [dwa]), powinno być:

myString.split(/[\s\W]+/)
 2
Author: Rishabh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-17 08:34:56

Możesz podzielić łańcuch po podziale linii, używając następującej instrukcji:

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

Można podzielić ciąg znaków na białe znaki, używając następującej instrukcji:

String textStr[] = yourString.split("\\s+");
 1
Author: RajeshVijayakumar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-01 13:40:50
String str = "Hello   World";
String res[] = str.split("\\s+");
 1
Author: Olivia Liao,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-02 11:36:08

Dziwi mnie, że nikt nie wspomniał o String.split() bez parametrów. Czy nie po to jest stworzony? jak w:

"abc def ghi".split()
 1
Author: Bill K,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-12 22:05:23

Przestudiuj ten kod.. powodzenia

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

        } 
    }
}
 -1
Author: Risith Ravisara,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-24 14:08:00