2012-07-30 67 views
33

我想知道如何將一個大字符串分割成一系列較小的字符串或單詞。 例如:字符串分割到各個單詞的Java

我想走我的狗。

我想有一個字符串:"I", 另一個字符串:"want"

我會怎麼做呢?

+2

請顯示*你已經嘗試了什麼(例如,你在String的文檔中查找單詞「split」)? – 2012-07-30 16:53:13

+9

是的,String#split()被非常模糊地命名爲:-P – maksimov 2012-07-30 16:53:59

回答

56

使用split()方法

如:

String s = "I want to walk my dog"; 

String[] arr = s.split(" ");  

for (String ss : arr) { 

     System.out.println(ss); 
    } 
+0

字符串s已定義? – fosho 2012-07-30 16:58:12

+0

@fosho謝謝...這是一個錯字 – 2012-07-30 17:00:26

+13

這種方法不會刪除單詞中的逗號,點等。 – kazy 2015-03-27 13:20:32

1

使用split()

String words[] = stringInstance.split(" "); 
+0

必須我進口? – fosho 2012-07-30 16:55:12

+2

沒有<!-------------> – 2012-07-30 16:56:15

+1

請通過鏈接從答案 – 2012-07-30 16:59:31

2

可以使用String類的split(" ")方法和代碼如下可以得到每個字:

String s = "I want to walk my dog"; 
String []strArray=s.split(" "); 
for(int i=0; i<strArray.length;i++) { 
    System.out.println(strArray[i]); 
} 
2

又一方法中,使用StringTokenizer

String s = "I want to walk my dog"; 
StringTokenizer tokenizer = new StringTokenizer(s); 

while(tokenizer.hasMoreTokens()) { 
    System.out.println(tokenizer.nextToken()); 
} 
+0

啊!這是好的情況下,我不需要一個數組,但不是標記器返回一個令牌數組?不錯,但 – 2017-01-20 21:42:43

+0

不,沒有任何陣列正在生產。 'StringTokenizer'在字符串中查找連續的標記並逐一返回。 – Kao 2017-01-21 12:55:09

+0

不錯的解決方案,不幸的是,StringTokenizer不應該再被使用。 來自文檔: StringTokenizer是一個遺留類,爲了兼容性原因被保留,儘管在新代碼中不鼓勵使用它。建議任何尋求此功能的人使用String或java.util.regex包的拆分方法。 – Tomor 2018-01-06 19:24:50

19

甲正則表達式也可以使用分開單詞。 \ W可以用來匹配字字符([A-ZA-Z0-9_]),這樣,標點符號從結果中移除:

String s = "I want to walk my dog, and why not?"; 
Pattern pattern = Pattern.compile("\\w+"); 
Matcher matcher = pattern.matcher(s); 
while (matcher.find()) { 
    System.out.println(matcher.group()); 
} 

輸出:

I 
want 
to 
walk 
my 
dog 
and 
why 
not 

見Java API文檔爲Pattern

+0

這是否產生空的話? – 2016-04-27 22:10:47

35

作爲一個更通用的解決方案(!但僅ASCII),包括單詞之間的任何其它的分隔符(如逗號和分號),我建議:

String s = "I want to walk my dog, cat, and tarantula; maybe even my tortoise."; 
String[] words = s.split("\\W+"); 

正則表達式意味着分隔符將是任何不是一個單詞[\ W],至少有一組[+]。因爲[+]很貪婪,所以需要比如';'和''一起作爲一個分隔符。

+4

\\ W似乎只考慮ASCII字母字符。它不適用於有口音的語言。 – rghome 2017-05-19 13:56:27

+0

謝謝你指出這一點!相應地更改了答案。 – 2017-05-21 14:03:56

3

見我other answer如果你的短語包含突出特點:

String[] listeMots = phrase.split("\\P{L}+"); 
+1

這是最好的答案。 – rghome 2017-05-19 14:06:26

0

要包含的關鍵字(例如除全部小寫和大寫字母的所有內容)之間的分隔符,我們可以這樣做:

String mystring = "hi, there,hi Leo"; 
String[] arr = mystring.split("[^a-zA-Z]+"); 
for(int i = 0; i < arr.length; i += 1) 
{ 
    System.out.println(arr[i]); 
} 

這裏的正則表示分隔符將是任何不是大寫或小寫字母[^a-zA-Z],至少一個[+]的組。