2011-03-08 145 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("")