@BasilBourque - Мне не удалось найти ни одной кнопки запуска по этой ссылке
nanosoft
1
@nanosoft Страница на IdeOne.com запускается автоматически при загрузке. Смотрите вывод под кодом, в разделе stdout . Чтобы изменить код, нажмите на forkссылку в левом верхнем углу.
То, что у вас есть, должно работать. Если, однако, предоставленные места по умолчанию ... что-то еще? Вы можете использовать регулярное выражение для пробелов:
str ="Hello I'm your String";String[] splited = str.split("\\s+");
Это приведет к тому, что любое количество последовательных пробелов разделит вашу строку на токены.
В качестве примечания, я не уверен, что слово «раскол» - это слово :) Я считаю, что состояние жертвы раскола тоже «раскол». Это одна из тех хитрых грамматических вещей :-) Не пытаясь быть разборчивым, просто решил, что я передам это!
Я швейцарец, что ты ожидал, мой английский не самый лучший, P, в любом случае, спасибо!
сафари
29
:-) Эй, он не большой. Я использовал несколько нелепых имен переменных (в коде я, вероятно, не должен был отпускать живого!) Я не пытался быть нацистским грамматиком или кем-то еще, просто передавал мелочи, вот и все.
CorsiKa
7
@Safari, вы только что получили 2 отличных совета по цене 1. шучу. Отличный ответ.
Нирмал Мангал
8
«То, что у вас должно работать», я часто говорю что-то подобное, когда мой код ломается.
Гриффин
1
Я нахожу это полезным, так как мой вариант использования был разделить строку и удалить несколько пробелов. Одна строка кода делает оба для меня.
Нихарика Упадхяй
87
В то время как принятый ответ хорош, имейте в виду, что в итоге вы получите пустую начальную строку, если ваша входная строка начинается с пробела. Например, с:
String str =" Hello I'm your String";String[] splitStr = str.split("\\s+");
Так что вы можете обрезать вашу строку перед тем, как ее разбить:
String str =" Hello I'm your String";String[] splitStr = str.trim().split("\\s+");
[редактировать]
В дополнение к trimпредупреждению, вы можете рассмотреть символ неразрывного пробела Юникод ( U+00A0). Этот символ печатается как обычный пробел в строке и часто скрывается в скопированном тексте из текстовых редакторов или веб-страниц. Они не обрабатываются с помощью .trim()каких тестов для символов, которые нужно удалить c <= ' '; \sих тоже не поймаешь.
Вместо этого вы можете использовать, \p{Blank}но вам нужно также включить поддержку символов Юникода, чего splitне будет делать обычный пользователь . Например, это будет работать: Pattern.compile("\\p{Blank}", UNICODE_CHARACTER_CLASS).split(words)но это не поможет trim.
Следующее демонстрирует проблему и предоставляет решение. Для этого далеко не оптимально полагаться на регулярное выражение, но теперь, когда Java имеет 8-битное / 16-битное представление байтов, эффективное решение для этого становится довольно длинным.
publicclassSplitStringTest{staticfinalPattern TRIM_UNICODE_PATTERN =Pattern.compile("^\\p{Blank}*(.*)\\p{Blank}$", UNICODE_CHARACTER_CLASS);staticfinalPattern SPLIT_SPACE_UNICODE_PATTERN =Pattern.compile("\\p{Blank}", UNICODE_CHARACTER_CLASS);publicstaticString[] trimSplitUnicodeBySpace(String str){Matcher trimMatcher = TRIM_UNICODE_PATTERN.matcher(str);boolean ignore = trimMatcher.matches();// always true but must be called since it does the actual matching/groupingreturn SPLIT_SPACE_UNICODE_PATTERN.split(trimMatcher.group(1));}@Testvoid test(){String words =" Hello I'm\u00A0your String\u00A0";// non-breaking space here --^ and there -----^String[] split = words.split(" ");String[] trimAndSplit = words.trim().split(" ");String[] splitUnicode = SPLIT_SPACE_UNICODE_PATTERN.split(words);String[] trimAndSplitUnicode = trimSplitUnicodeBySpace(words);System.out.println("words: ["+ words +"]");System.out.println("split: ["+Arrays.stream(split).collect(Collectors.joining("]["))+"]");System.out.println("trimAndSplit: ["+Arrays.stream(trimAndSplit).collect(Collectors.joining("]["))+"]");System.out.println("splitUnicode: ["+Arrays.stream(splitUnicode).collect(Collectors.joining("]["))+"]");System.out.println("trimAndSplitUnicode: ["+Arrays.stream(trimAndSplitUnicode).collect(Collectors.joining("]["))+"]");}}
Результаты в:
words:[Hello I'm your String]
split:[][Hello][I'm your][String]
trimAndSplit:[Hello][I'm your][String]
splitUnicode:[][Hello][I'm][your][String]
trimAndSplitUnicode:[Hello][I'm][your][String]
Я действительно считаю, что использование регулярных выражений в скобках str.split должно решить эту проблему. Метод Java String.split () основан на регулярных выражениях, поэтому вам нужно:
str ="Hello I'm your String";String[] splitStr = str.split("\\s+");
Существует возможность создания исключения ArrayIndexOutofBounds.
Аджай Такур
2
Нет, это не сгенерирует ArrayIndexOutofBounds, потому что я объявил размер массива в соответствии с количеством токенов, найденных в String. это гарантирует, что размер массива не будет больше, чем количество полученных токенов в строке.
import java.util.regex.Pattern;...privatestaticfinalPattern SPACE =Pattern.compile(" ");String[] arr = SPACE.split(str);// str is the string to be split
Это 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
fork
ссылку в левом верхнем углу.Ответы:
То, что у вас есть, должно работать. Если, однако, предоставленные места по умолчанию ... что-то еще? Вы можете использовать регулярное выражение для пробелов:
Это приведет к тому, что любое количество последовательных пробелов разделит вашу строку на токены.
В качестве примечания, я не уверен, что слово «раскол» - это слово :) Я считаю, что состояние жертвы раскола тоже «раскол». Это одна из тех хитрых грамматических вещей :-) Не пытаясь быть разборчивым, просто решил, что я передам это!
источник
В то время как принятый ответ хорош, имейте в виду, что в итоге вы получите пустую начальную строку, если ваша входная строка начинается с пробела. Например, с:
Результат будет:
Так что вы можете обрезать вашу строку перед тем, как ее разбить:
[редактировать]
В дополнение к
trim
предупреждению, вы можете рассмотреть символ неразрывного пробела Юникод (U+00A0
). Этот символ печатается как обычный пробел в строке и часто скрывается в скопированном тексте из текстовых редакторов или веб-страниц. Они не обрабатываются с помощью.trim()
каких тестов для символов, которые нужно удалитьc <= ' '
;\s
их тоже не поймаешь.Вместо этого вы можете использовать,
\p{Blank}
но вам нужно также включить поддержку символов Юникода, чегоsplit
не будет делать обычный пользователь . Например, это будет работать:Pattern.compile("\\p{Blank}", UNICODE_CHARACTER_CLASS).split(words)
но это не поможетtrim
.Следующее демонстрирует проблему и предоставляет решение. Для этого далеко не оптимально полагаться на регулярное выражение, но теперь, когда Java имеет 8-битное / 16-битное представление байтов, эффективное решение для этого становится довольно длинным.
Результаты в:
источник
Я действительно считаю, что использование регулярных выражений в скобках str.split должно решить эту проблему. Метод Java String.split () основан на регулярных выражениях, поэтому вам нужно:
источник
Используйте,
Stringutils.split()
чтобы разбить строку по белому шагу. НапримерStringUtils.split("Hello World")
возвращает «Привет» и «Мир»;Чтобы решить упомянутый случай, мы используем такой метод разбиения
когда мы распечатаем массив split, результат будет:
Привет
я
ваш
строка
Для полного примера демонстрации проверьте здесь
источник
Пытаться
http://download.oracle.com/javase/tutorial/essential/regex/pre_char_classes.html
источник
если вы не хотите использовать метод разделения String, вы можете использовать класс StringTokenizer в Java как ...
источник
Попробуй это
источник
Альтернативный способ будет:
Видел это здесь
источник
Итак, мы должны сделать разбиение, так как вы уже получили ответ, я бы обобщил его.
Если вы хотите разделить любую строку пробелами, разделитель (специальные символы).
Во-первых, удалите пробелы, поскольку они создают большинство проблем.
Сначала удалите начальное пространство, которое может быть пробелом, символом табуляции и т. Д.
Теперь, если вы хотите разделить по пробелам или любым специальным символам.
Но поскольку w содержит [a-zA-Z_0-9], поэтому, если вы хотите разделить символом подчеркивания (_), также используйте
источник
replaceAll("^\\s+","")
спасло мой день. Это сработало для моего случая. СпасибоОчень простой пример ниже:
Надеюсь, поможет.
источник
Вы можете использовать строку, используя приведенный ниже код
источник
Вот метод, чтобы обрезать строку, которая имеет "," или пробел
источник
Прошло много времени с тех пор, как эти ответы были опубликованы, вот еще один более актуальный способ сделать то, что просили:
Теперь у вас есть список строк (который, возможно, лучше, чем массив); если вам нужен массив, вы можете сделать
output.toArray(new String[0]);
источник
Не только пробел, но и мое решение также решает проблемы невидимых символов.
источник
Простая плевать строка на пробел
источник