2012-07-30 38 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],至少一个[+]的组。