Мне нужно разбить String на массив строк с одним символом.
Например, разбиение "cat" даст массив "c", "a", "t"
Мне нужно разбить String на массив строк с одним символом.
Например, разбиение "cat" даст массив "c", "a", "t"
"cat".split("(?!^)")
Это приведет к созданию
массив [ "c", "a", "t" ]
"cat".toCharArray()
Но если вам нужны строки
"cat".split("")
Изменить: это будет возвращать пустое первое значение.
String str = "cat";
char[] cArray = str.toCharArray();
Посмотрите на класс String метод getChars().
Эффективный способ превращения 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
должен скопировать символы в новый массив.
Если на входе присутствуют символы за пределами 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]);
Возможно, вы можете использовать цикл for, проходящий через содержимое String, и извлечение символов символами с помощью метода charAt
.
В сочетании с ArrayList<String>
, например, вы можете получить свой массив отдельных символов.
for(int i=0;i<str.length();i++)
{
System.out.println(str.charAt(i));
}