每个单词的起始索引

时间:2014-04-12 22:37:17

标签: java regex

我想得到字符串中每个单词的开头索引。 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 单词之间可以有多个空格。

4 个答案:

答案 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);