2011-03-08 142 views
83

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

例如,分裂“猫”会给阵列“C”,“A”,“T”

+2

http://stackoverflow.com/questions/1521921/splitting-words-into-letters-in-java – birryree 2011-03-08 16:40:24

+1

作为一个快速参考 “”。加入([“c”,“a”,“t”])以获得“猫”。 – shuva 2017-12-13 18:36:41

回答

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

这将产生

阵列[ “C”, “一个”, “T”]

+6

如何和为什么?这是一个正则表达式的意思吗?因为在我的脑海中,用分裂的方式工作,这只会分裂为实际的字符(,?,!,^和)。然而,它按照你所说的那样工作。 – TyP 2014-03-06 02:07:16

+2

这确实是一个正则表达式,称为负向预测。在这里查看文档:http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html#sum – Erwin 2014-05-28 08:51:27

+1

@ EW-CodeMonkey'(?!'...')'是否定断言的正则表达式语法 - 它断言它内部没有匹配。 '^'匹配字符串的开头,所以正则表达式匹配每个不是*字符串开头的位置,并在那里插入一个分割。这个正则表达式也匹配字符串的末尾,因此除了'String.split'文档[说](https://docs.oracle.com/javase/8/docs)之外,还会在结果中附加一个空字符串/api/java/lang/String.html#split-java.lang.String-)“结尾的空字符串不包含在结果数组中”。 – Boann 2015-11-09 00:46:34

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

+1但是OP可能需要String数组。 – 2011-03-08 16:41:02

+3

Nitpicking,原始问题要求一个String数组,而不是Char数组。但是,从这里获取一个String数组非常简单。 – dsolimano 2011-03-08 16:41:31

+0

是的,我已经知道如何获得一系列字符。如果没有其他方法,我可以迭代char数组,并从每个数组中创建一个字符串。 – Matt 2011-03-08 23:11:41

-1

也许你可以使用一个for循环,通过字符串的内容去,并提取由字符的字符使用charAt方法。

例如,您可以结合一个ArrayList<String>获得您的单个字符数组。

+0

也许你可以站在一条腿上唱“神拯救女王”。对不起,但这甚至不是正确的。 – 2017-01-27 07:54:17

4

看看String类的getChars()方法。

+1

太复杂了。其他答案有更简单的解决方案 – 2011-03-08 16:45:01

81
"cat".toCharArray() 

但是如果你需要串

"cat".split("") 

编辑:它会返回一个空的第一个值。

+8

“cat”.split(“”)会返回[,c,a,t],不是?您的阵列中会有一个额外的字符... – reef 2011-03-08 16:48:50

+3

“猫”.split(“”)无法按预期工作,您将得到一个额外的空String => [,c,a,t]。 – reef 2011-03-08 16:57:44

+5

如果您使用Java 8,此答案现在可以工作。请参阅http://stackoverflow.com/a/22718904/1587046 – 2014-04-25 14:01:42

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

解释为什么这会起作用。 – Phiter 2016-06-07 17:21:37

+1

你确定这将要把一个字符串分割成一个数组吗?你只是将字符串打印到屏幕上。 – TDG 2016-06-07 17:21:49

1

转动串转化成的阵列的有效方式一个字符串将会这样做:

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

但是,这并没有考虑到String中的char实际上可能代表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副本字符到一个新的数组。

1
因为他们打破这种字符(结果为 array ["a", "?", "?", "b"])和更安全的东西已被用作 "ab".split("(?!^)")不能使用

如果超出Basic Multilingual Plane字符预期输入(某些CJK字符,新的表情符号),这样的方法,:

"ab".codePoints() 
    .mapToObj(cp -> new String(Character.toChars(cp))) 
    .toArray(size -> new String[size]); 
0

综上所述其他答案...

这适用于所有的Java版本:

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

只关于Java 8个,最多这仅适用于:

"cat".split("")