我有这段代码:
String s = "bla mo& lol!";
Pattern p = Pattern.compile("[a-z]");
String[] allWords = p.split(s);
我试图将根据这个特定模式的所有单词都放到一个数组中。 但我得到了相反的结论。
我想要我的阵列:
allWords = {bla, mo, lol}
但我明白了:
allWords = { ,& ,!}
有没有快速的解决方案,或者我必须使用matcher和while循环来插入它 进入阵列?
答案 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+");