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请回复。”?