Як розділити рядок з будь-якими символами пробілу як роздільники


555

Що регулярний вираз шаблон буде потрібно я перейти до java.lang.String.split() розбити рядок в масив підрядків , використовуючи всі символи пробілу ( ' ', '\t', '\n'і т.д.) в якості роздільників?

Відповіді:


955

Щось у рядках

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

Це об'єднує всі пробіли як роздільник.

Тож якщо у мене є рядок:

"Hello[space][tab]World"

Це повинно отримати рядки "Hello"та "World"пропустити порожній простір між [space]і [tab].

Як вказував VonC, зворотну косу рису слід уникати, тому що Java спершу спробує уникнути рядка до спеціального символу та надішле його на розбір. Те, що ви хочете, це буквальне "\s", а це означає, що вам потрібно пройти "\\s". Це може стати трохи заплутаним.

\\sЕквівалентно [ \\t\\n\\x0B\\f\\r].


1
Дякую за це нагадування. Я щойно кодував із стегна :)
Генрік Пол,

34
Зауважте, що вам потрібно trim()спочатку: trim().split("\\s++")- інакше, наприклад, розщеплення `abc` спочатку видасть дві порожні рядки.
Маркус Юній Брут

Чому ви скористалися чотирма нахилами в кінці своєї відповіді? тобто. "\\\\s"?
Михайло Борковський

"" .trim (). split ("\\ s +") - порожній рядок split дає вам довжину 1. "term" .trim (). split ("\\ s +") - дає також довжину 1 .
PaulSchell

88

У більшості діалектних регексів є набір зручних резюме символів, які ви можете використовувати для подібних речей - це добре запам'ятати:

\w - Відповідає будь-якому символу слова.

\W - Відповідає будь-якому несловесному символу.

\s - Відповідає будь-якому символу пробілу.

\S - Відповідає будь-що, крім символів пробілу.

\d - Відповідає будь-якій цифрі.

\D - Відповідає нічого, крім цифр.

Пошук «Шахрайків Regex» повинен нагородити вас цілою масою корисних резюме.




64

Щоб це працювало в Javascript , мені довелося зробити наступне:

myString.split(/\s+/g)

15
Це в JavaScript. Я також не звертав уваги :)
miracle2k

14
На жаль Моя помилка. Можливо, ця відповідь все-таки допоможе іншим, хто натрапить на цю тему, шукаючи відповідь Javascript. :-)
Майк Манард

Ха-ха, я шукав відповідь на JavaScript, випадково натрапив на це питання, а потім помітив вашу відповідь, перш ніж я пішов. +1.
Кріс

Це чудово! Я радий почути, що ця відповідь виявилася корисною для когось, навіть якщо вона відповіла неправильним питанням. :-)
Майк Манард

Це мені так само допомогло, що потрібно для розбиття серверних аргументів :)
ProgrammerPlays


11

Також у вас може бути пробіл UnAc, що не порушує xA0 ...

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

це мені допомагає!
Surasin Tancharoen



2

Оскільки це регулярний вираз, і я припускаю, що ви також не хочете не алфавітно-цифрових символів, як коми, крапки тощо, які можуть бути оточені пробілами (наприклад, "один, два" повинен дати [один] [два]), вона повинна бути:

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

1

ви можете розділити рядок на розрив рядка, скориставшись наступним висловом:

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

ви можете розділити рядок по Whitespace, скориставшись наступним оператором:

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


-1

Вивчіть цей код .. удачі

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

        } 
    }
}

Чи можете ви детально розказати свою відповідь?
Стефан
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.