java - 计算句子数

标签 java arrays

我有一个简单的循环来计算输入句子。当标点符号重复一次时效果很好,但它们可以像“!!!”一样组合在一起。或者 ”???”。因此,它像不同的句子一样计算它,如果它不是标记,我应该检查下一个字符。我没有任何想法,谢谢您的宝贵时间!

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Please enter your sentence");
String line =br.readLine();
String delimiters = "?!.";
int count=0;

for(int i=0;i<line.length();i++) {

    if (delimiters.indexOf(line.charAt(i))!=-1) {
        count++;
    }
}
System.out.println("There are "+count+" sentences");

最佳答案

跳过重复字符,即仅在该字符与前一个字符不同时才检查它是否是分隔符。

String delimiters = "?!.";
int count = 0;
for (int i = 0; i < line.length(); i++) {
    if (i == 0 || line.charAt(i) != line.charAt(i - 1)) {
        if (delimiters.indexOf(line.charAt(i)) != -1) {
            count++;
        }
    }
}
<小时/>

正如一些人在评论中建议的那样,您还可以使用正则表达式,例如像这样:

int count = line.replaceAll("([?!.])+|[^?!.]+", "$1").length();

此正则表达式解决方案仅对相邻分隔符字符进行一次计数,即使它们不同,例如如果 line = "This is a text. No a test!! Why?!?!?",那么您将得到 count = 3

关于java - 计算句子数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58942322/

相关文章:

c - 从 C 中的 1 个输入行读取多个值

javascript - 是否可以在实际循环周期之外使用 'for' 循环内的值?

c++ - 如何以正确的方式将结构数组参数传递给函数?

c++ - 如何在 C++ 中创建一个长度等于用户输入的数组?

java - 删除字符串的一部分之后的所有内容

javascript - 检查一个数组中的每一项是否与另一个数组中的匹配

java - Eclipse 氧气升级 - "Java Virtual Machine Launcher - A Java Exception has occured)"

java - 如何在 Controller 中制作删除按钮

java - 从 jDateChooser 获取值并保存到 MS sql DB

java - Android 异步任务中的返回列表