Подтвердить что ты не робот

Разделить строку на массив символов

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

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

4b9b3361

Ответ 1

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

Это приведет к созданию

массив [ "c", "a", "t" ]

Ответ 2

"cat".toCharArray()

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

"cat".split("")

Изменить: это будет возвращать пустое первое значение.

Ответ 3

String str = "cat";
char[] cArray = str.toCharArray();

Ответ 5

Эффективный способ превращения String в массив односимвольных строк должен был бы сделать это:

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

Однако это не учитывает тот факт, что a 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 должен скопировать символы в новый массив.

Ответ 6

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

"a💫b".codePoints()
    .mapToObj(cp -> new String(Character.toChars(cp)))
    .toArray(size -> new String[size]);

Ответ 7

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

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

Ответ 8

for(int i=0;i<str.length();i++)
{
System.out.println(str.charAt(i));
}