在Java中使用模式,匹配器

时间:2014-06-12 12:37:03

标签: java arrays regex

我有这段代码:

String s = "bla mo& lol!";
Pattern p = Pattern.compile("[a-z]");
String[] allWords = p.split(s);

我试图将根据这个特定模式的所有单词都放到一个数组中。 但我得到了相反的结论。

我想要我的阵列:

allWords = {bla, mo, lol}

但我明白了:

allWords = { ,& ,!}

有没有快速的解决方案,或者我必须使用matcher和while循环来插入它 进入阵列?

4 个答案:

答案 0 :(得分:2)

Pattern p = Pattern.compile("[a-z]");
p.split(s);

表示所有[a-z]都是分隔符,而不是数组元素。你可能想要:

Pattern p = Pattern.compile("[^a-z]+");

答案 1 :(得分:0)

你正在分割字母。拆分用于分隔符,因此更改模式

[^a-z]

答案 2 :(得分:0)

split方法有一个分隔符,即Pattern

它是反向语法,但是String.split的机制完全相同,其中你给出一个Pattern表示作为参数,它也将作为分隔符。

您的分隔符是字符类,这是预期的结果。

如果您只想保留文字,请尝试以下方法:

String s = "bla mo& lol!";
//                           | will split on 
//                           | 1 + non-word
//                           | characters
Pattern p = Pattern.compile("\\W+");
String[] allWords = p.split(s);
System.out.println(Arrays.toString(allWords));

<强>输出

[bla, mo, lol]

答案 3 :(得分:0)

一种简单的方法是:

String[] words = s.split("\\W+");