我需要将String拆分为单个字符串的数组。
例如,拆分“cat”会给出数组“c”,“a”,“t”
答案 0 :(得分:110)
"cat".split("(?!^)")
这将产生
数组[" c"," a"," t"]
答案 1 :(得分:96)
"cat".toCharArray()
但如果你需要字符串
"cat".split("")
编辑:将返回空的第一个值。
答案 2 :(得分:36)
String str = "cat";
char[] cArray = str.toCharArray();
答案 3 :(得分:4)
如果输入上有Basic Multilingual Plane以外的字符(某些CJK字符,新表情符号...),则无法使用"ab".split("(?!^)")
等方法,因为它们会破坏这些字符(结果为{{1}必须使用更安全的东西:
array ["a", "?", "?", "b"]
答案 4 :(得分:2)
总结其他答案......
这适用于所有Java版本:
"cat".split("(?!^)")
这仅适用于Java 8及更高版本:
"cat".split("")
答案 5 :(得分:1)
将String转换为单字符字符串数组的有效方法是:
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
必须将字符复制到新数组中。
答案 6 :(得分:0)
如果原始字符串包含supplementary Unicode characters,则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);
}
答案 7 :(得分:0)
split("(?!^)")
无法正常工作。您应该使用split("(?<=.)")
。
String[] splitted = "花ab???".split("(?<=.)");
System.out.println(Arrays.toString(splitted));
输出:
[花, a, b, ?, ?, ?]
答案 8 :(得分:-1)
也许您可以使用遍历String内容的for循环,并使用charAt
方法按字符提取字符。
例如,您可以使用ArrayList<String>
来获取各个角色的数组。
答案 9 :(得分:-1)
for(int i=0;i<str.length();i++)
{
System.out.println(str.charAt(i));
}