我正在研究java项目,我需要计算点数,!和?在一个字符串中。我目前的方法是使用正则表达式。我使用了以下代码,但没有给出正确的结果。
for(int i=0; i<words.length; i++){
String w = words[i];
if(w.matches("(.)+[.!?]")){
count++; //increasing the count.
}
}
对于其他一些函数,我已将字符串转换为单词数组。所以我在这里使用它。
我希望每次出现点数时将计数增加一个!要么 ?表示句子的终止点。例如
测试。 - 计数增加1 测试.. - 计数增加1 测试?。 - 计数增加1
重复使用符号不应增加计数 你能告诉我这里有什么问题吗?
答案 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
。