Java 写一个正则表达式来计算句子数

Java 写一个正则表达式来计算句子数,java,regex,Java,Regex,我有一个字符串: "Hello world... I am here. Please respond." 我想计算字符串中的句子数。我想到了使用扫描器以及使用delimiter方法将任何字符串拆分成句子 Scanner in = new Scanner(file); in.useDelimiter("insert here"); 我想创建一个正则表达式,它可以遍历上面显示的字符串,并确定它有两个句子。我最初尝试使用分隔符: [^?.] 它挂在省略号上。您可以使用一个正则表达式来检查句子的非

我有一个
字符串

"Hello world... I am here. Please respond."
我想计算
字符串中的句子数。我想到了使用
扫描器
以及
使用delimiter
方法将
任何
字符串
拆分成句子

Scanner in = new Scanner(file);
in.useDelimiter("insert here");
我想创建一个正则表达式,它可以遍历上面显示的
字符串
,并确定它有两个句子。我最初尝试使用分隔符:

[^?.]

它挂在省略号上。

您可以使用一个正则表达式来检查句子的非结尾,然后是句子的结尾,如:

[^?!.][?!.]

尽管@Gabe Sechan指出,当句子包含Dr.,Rd.,St.等缩写词时,正则表达式可能不准确。

正则表达式可能不是正确的工具。英语不是正规语言,所以正则表达式经常被挂断。首先,你甚至不能确定文本中间的一段是句子的末尾——缩略语(比如先生),缩写有句点,缩写也会把你搞砸。这不是正确的工具。

对于你的句子:“你好,世界……我在这里。请回答。”

守则如下:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class JavaRegex {

    public static void main(String[] args) {
        int count=0;
        String sentence = "Hello world... I am here. Please respond.";
        Pattern pattern = Pattern.compile("\\..");
        Matcher matcher = pattern.matcher(sentence);
        while(matcher.find()) {
            count++;
        }
        System.out.println("No. of sentence = "+count); 
    }

}
这将有助于:

public int getNumSentences()
{
列表标记=getTokens(“[^!?.]+”);
返回tokens.size();
}

您还可以添加enter按钮作为分隔符,并通过以下代码行使其独立于您的操作系统

String pattern = System.getProperty("line.separator" + " ");
事实上,你可以找到更多关于

进入 在这里:

因此,该方法最终成为:

public int getNumSentences() 
{
    List<String> tokens = getTokens( "[^!?.]+" + pattern + "+" );
    return tokens.size();
}
public int getNumSentences()
{
列表标记=getTokens(“[^!?。]”+“+模式+”+”);
返回tokens.size();
}

希望这能有所帮助:)

完全正确的解决方案是不可能的。基本上是对的,这是可能的。如果这是一个家庭作业(或自学),那么这个问题的目的可能是让你意识到常规表达的局限性regex是一个不好的方法的另一个原因是,有时候你会有一个文档,其中行尾被认为是句子的结尾(而其他时候不是).它如何与“你好,世界……我在这里。2.5请回复。”?