Як розділити рядок на пробіл


329

Мені потрібно розділити мою рядок на пробіли. Для цього я спробував:

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

Але це, здається, не працює.


3
Добре виглядає ... які значення в "розбитим" масиві?
npinti

1
Ваш код дійсно працює як є. Дивіться код, який виконується на веб-сайті IdeOne.com .
Василь Бурк

@BasilBourque - Я не зміг знайти жодної кнопки запуску за цим посиланням
nanosoft

1
@nanosoft Сторінка на IdeOne.com працює автоматично після завантаження. Дивіться вихід під кодом, в розділі stdout . Щоб змінити код, натисніть forkпосилання біля верхнього лівого кута.
Василь Бурк

Відповіді:


639

Те, що у вас є, повинно працювати. Якщо, однак, надані місця не знаходяться за замовчуванням для чогось іншого? Ви можете використовувати вираз пробілу:

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

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

Як зауваження, я не впевнений, що "роздвоєне" це слово :) Я вважаю, що стан жертви розколу також "розкол". Це одна з тих складних граматичних речей :-) Не намагаючись бути вибагливим, просто подумав, що передам це!


45
Я швейцарець, що ти очікував, моя англійська мова не найкраща; P, все одно, що це спрацювало!
сафарі

29
:-) Ей, це не велике. Я використав кілька смішних імен змінних (у коді я, мабуть, не мав би відпустити його!) Я не намагався бути граматичним нацистом чи що-небудь, просто передавав невеликі дрібниці, ось і все.
corsiKa

7
@Safari, ти щойно отримав 2 чудових поради в ціні 1. просто жартую. Чудова відповідь.
Nirmal Mangal

8
"Те, що у вас є, повинно працювати", я кажу щось подібне досить часто, коли мій код ламається.
Гриффін

1
Мені здається корисним, оскільки моїм випадком використання було розділити рядок та видалити декілька пробілів. Один рядок коду для мене обох.
Niharika Upadhyay

87

Хоча прийнята відповідь хороша, майте на увазі, що ви отримаєте провідну порожню рядок, якщо вхідна рядок починається з пробілу. Наприклад, за допомогою:

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

Результатом буде:

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

Тому ви, можливо, захочете обрізати рядок, перш ніж розділяти її:

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

29

Я вважаю, що введення регулярних виразів у дужках str.split має вирішити проблему. Метод Java String.split () заснований на регулярних виразах, тому що вам потрібно:

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

12

Використовуйте, Stringutils.split()щоб розділити рядок на білі кроки. Наприклад StringUtils.split("Hello World")повертає "Привіт" та "Світ";

Для розв’язання згаданого випадку ми використовуємо подільний метод на зразок цього

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

коли ми друкуємо розділений масив, вихід буде:

Здравствуйте

Я

свій

Рядок

Повний демонстраційний приклад див. Тут



6

якщо якимось чином ви не хочете використовувати метод String split, то ви можете використовувати клас StringTokenizer в Java як ..

    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 Exception.
Аджай Такур

2
Ні, це не кине "ArrayIndexOutofBounds", оскільки я оголошую розмір масиву відповідно до кількості лексем, знайдених у String. це переконається, що розмір масивів не буде більше, ніж отриманих жетонів у рядку.
Мухаммад Сулеман

6

Спробуйте це

    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

Альтернативним способом було б:

import java.util.regex.Pattern;

...

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

Побачили тут


3

Гаразд, тому ми повинні зробити розбиття, оскільки ви вже отримали відповідь, я б це узагальнив.

Якщо ви хочете розділити будь-який рядок на пробіли, розділіть його (спеціальні символи).

Спочатку видаліть провідний простір, оскільки вони створюють більшість питань.

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

Спочатку видаліть провідний простір, який може бути пробілом, вкладками тощо.

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

Тепер, якщо ви хочете розділити на простір або будь-який спеціальний знак.

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

Але оскільки w містить [a-zA-Z_0-9], то якщо ви хочете розділити на підкреслення (_), також використовуйте

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

Це replaceAll("^\\s+","")врятувало мені день. Це працювало для моєї справи. Дякую
Костас Асаргіотакіс

2

Дуже простий приклад нижче:

Сподіваюся, це допомагає.

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

Ви можете надіслати рядок за допомогою наведеного нижче коду

   String thisString="Hello world";

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

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

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

0

Ось метод обрізки рядка, який має пробіл "," або пробіл

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

        return output;
    }

0

Оскільки минуло чимало часу з часу опублікування цих відповідей, ось ще один актуальніший спосіб зробити те, що задають:

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

Тепер у вас є список рядків (що, мабуть, краще, ніж масив); якщо вам потрібен масив, ви можете це зробитиoutput.toArray(new String[0]);


0

Не тільки пробіл, але і моє рішення також вирішує невидимі символи.

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

-1

Простий в косі струну

    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());
         }
     }
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.