将字符串拆分为字符串数组

时间:2011-03-08 16:38:05

标签: java regex split

我需要将String拆分为单个字符串的数组。

例如,拆分“cat”会给出数组“c”,“a”,“t”

10 个答案:

答案 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));
}