我想得到字符串中每个单词的开头索引。 Word由任何非空白字符定义。
String test = "this that and that";
Matcher matcher = Pattern.compile("\\s+[WHAT TO WRITE HERE]\\s+").matcher(test);
while (matcher.find()) {
System.out.println(matcher.start());
}
我应该在正则表达式中写什么?对于例如输出应为0,5,10,14 单词之间可以有多个空格。
答案 0 :(得分:3)
Word由任何非空格字符定义。
还有一个字符类:\S
。
因此,你的正则表达式应该是:
private static final Pattern PATTERN = Pattern.compile("\\S+");
但请注意" word"的定义你有相当大的;这还包括标点符号等。
关于你的循环,它是正确的,因为当你有匹配时,Matcher
的{{1}}方法确实包含匹配开始的索引。
接受你的代码并稍微修改一下,这就得到了:
.start()
答案 1 :(得分:1)
我会使用这个正则表达式:
...
Matcher matcher = Pattern.compile("[^\\s]+").matcher(test);
...
答案 2 :(得分:1)
我会用:
[A-Za-z0-9]+
它只会找到字母数字。 我认为“\ S +”会因标点符号和奇怪的字符而出现问题。 如果需要,您甚至可以删除数字(“0-9”)部分。
答案 3 :(得分:1)
@fge已经给出了最好的答案,但因为我无法回复他的评论。 @Ian McGrath你问的是你能写得好的其他解决方案。这就是我想出来的,它似乎也有效。
Matcher matcher = Pattern.compile("\\w+?(\\s+|$)").matcher(test);