Разделить строку на массив строк символов - PullRequest
98 голосов
/ 08 марта 2011

Мне нужно разделить строку на массив строк из одного символа.

Например, разделение "cat" даст массив "c", "a", "t"

Ответы [ 9 ]

111 голосов
/ 19 октября 2012
"cat".split("(?!^)")

Это даст

array ["c", "a", "t"]

96 голосов
/ 08 марта 2011
"cat".toCharArray()

Но если вам нужны строки

"cat".split("")

Редактировать: возвращать пустое первое значение.

36 голосов
/ 08 марта 2011
String str = "cat";
char[] cArray = str.toCharArray();
4 голосов
/ 18 февраля 2017

Если символы за пределами Базовая многоязычная плоскость ожидаются при вводе (некоторые символы CJK, новые эмодзи ...), такие подходы, как "a?b".split("(?!^)"), не могут использоваться, поскольку они разбивают такие символы (в результате array ["a", "?", "?", "b"]) и что-то более безопасное должно быть использовано:

"a?b".codePoints()
    .mapToObj(cp -> new String(Character.toChars(cp)))
    .toArray(size -> new String[size]);
2 голосов
/ 06 марта 2018

Суммируя другие ответы ...

Это работает на всех версиях Java:

"cat".split("(?!^)")

Это работает только на Java 8 и выше:

"cat".split("")
1 голос
/ 27 января 2017

Эффективный способ превратить строку в массив односимвольных строк состоит в следующем:

String[] res = new String[str.length()];
for (int i = 0; i < str.length(); i++) {
    res[i] = Character.toString(str.charAt(i));
}

Однако это не учитывает тот факт, что char вString может фактически представлять половину кодовой точки Unicode.(Если кодовая точка отсутствует в BMP.) Чтобы справиться с этим, вам нужно перебрать кодовые точки ... что более сложно.

Этот подход будет быстрее, чем использование String.split(/* clever regex*/)и это, вероятно, будет быстрее, чем использование потоков Java 8+.Вероятно, быстрее, чем это:

String[] res = new String[str.length()];
int 0 = 0;
for (char ch: str.toCharArray[]) {
    res[i++] = Character.toString(ch);
}  

, потому что toCharArray должен скопировать символов в новый массив.

0 голосов
/ 18 июня 2018

Если исходная строка содержит дополнительные символы Unicode , то split() не будет работать, поскольку она разбивает эти символы на суррогатные пары.Чтобы правильно обрабатывать эти специальные символы, работает такой код:

String[] chars = new String[stringToSplit.codePointCount(0, stringToSplit.length())];
for (int i = 0, j = 0; i < stringToSplit.length(); j++) {
    int cp = stringToSplit.codePointAt(i);
    char c[] = Character.toChars(cp);
    chars[j] = new String(c);
    i += Character.charCount(cp);
}
0 голосов
/ 07 июня 2016
for(int i=0;i<str.length();i++)
{
System.out.println(str.charAt(i));
}
0 голосов
/ 08 марта 2011

Возможно, вы можете использовать цикл for, который просматривает содержимое строки и извлекает символы по символам, используя метод charAt.

В сочетании, например, с ArrayList<String>, вы можете получить массив отдельных символов.

...