计算点数[。] ,!和?在文本中

时间:2015-02-08 05:07:58

标签: java regex string

我正在研究java项目,我需要计算点数,!和?在一个字符串中。我目前的方法是使用正则表达式。我使用了以下代码,但没有给出正确的结果。

for(int i=0; i<words.length; i++){
        String w = words[i];
        if(w.matches("(.)+[.!?]")){
            count++;    //increasing the count.
        }
    }

对于其他一些函数,我已将字符串转换为单词数组。所以我在这里使用它。
我希望每次出现点数时将计数增加一个!要么 ?表示句子的终止点。例如

  

测试。 - 计数增加1   测试.. - 计数增加1   测试?。 - 计数增加1

重复使用符号不应增加计数 你能告诉我这里有什么问题吗?

3 个答案:

答案 0 :(得分:2)

在正则表达式中使用通配符。

    int count = 0;

    for( int i = 0; i < words.length; i++ )
        if( words[i].matches(".*[.!?]") )
            count++;    

。* [。!?]将匹配以句点,感叹号或问号结尾的所有字符串。

第一个.未转义,代表任何角色。 *表示前一个0或更多。所以任何一个角色都是0或者更多。括号中的.是转义的,所以它只是一个常规时期。

答案 1 :(得分:0)

最简单的方法是这个单行:

int count = str.length() - str.replaceAll("[.!?]+", "").length()

不是计算char匹配,而是删除它们并比较长度。

答案 2 :(得分:0)

你可以做 -

public static void main(String args[])
{
    String str = "Test, test!.\tTEST:\nTeST?;";
    Pattern p = Pattern.compile("[.!?]");
    Matcher matcher = p.matcher(str);
    int count = 0;
    while(matcher.find()) {
        count++;
    }
    System.out.println("Count : " + count);

}

,输出为 - 3,符合预期。

  

你能告诉我为什么str.matches中的相同正则表达式(“[。!?])没有给出预期的结果吗?

因为str.matches("[.!?])匹配整个String而不是在String中找到正则表达式。如果字符串是'。','?'或'!',则正则表达式将起作用 -

    String s = ".";
    System.out.println(s.matches("[.!?]"));

将提供true