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

时间:2015-09-13 05:35:10

标签: java regex

我有String

"Hello world... I am here. Please respond."

我想计算String内的句子数量。我有一个想法是使用Scanner以及useDelimiter方法将split任意String用于句子。

Scanner in = new Scanner(file);
in.useDelimiter("insert here");

我想创建一个正则表达式,它可以通过我上面显示的String并将其识别为有两个句子。我最初尝试使用分隔符:

[^?.]

它挂在省略号上。

3 个答案:

答案 0 :(得分:1)

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

[^?!.][?!.]

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

答案 1 :(得分:1)

这可能会有所帮助:

public int getNumSentences() { List<String> tokens = getTokens( "[^!?.]+" ); return tokens.size(); }

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

String pattern = System.getProperty("line.separator" + " ");

实际上你可以找到更多关于

的信息
  

输入   在这里:Java regex: newline + white space

因此最终方法变为:

public int getNumSentences() 
{
    List<String> tokens = getTokens( "[^!?.]+" + pattern + "+" );
    return tokens.size();
}

希望这可以帮助:)!

答案 2 :(得分:0)

对于你的句子:“你好世界......我在这里。请回复。”

代码将是:

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); 
    }

}