2013-10-25 20 views
1

我正在检查3个字符串是否位于同一个句子中。检查3个字符串是否位于同一个句子中--Java

例如句子奥巴马出生于11月4日1960年 在这个句子string1为奥巴马 string2为出生于 STRING3是1960年11月4日

我的想法是,以检查是否存在无期(“。”)在string1,string2和string3之间,我可以相信位于同一句子中的3个字符串。

但有时一句话就像是史密斯先生和4月2日1970年

史密斯太太都出生,如果我只是检查期间(“”)我的方法失败。有人可以建议我有没有其他方法来检查位于同一个句子中的3个字符串?

+3

什么是'最满意'?但不管,为什么你不检查a)是否是字符串1? b)是string2? c)是string3?如果所有3个都是'真的',那么所有3个都在那里...... – iluxa

+2

@iluxa'fullstop'是他们在学校教过的'作为句子结尾'。' –

+0

哦,我明白了。 @ user12345,你现在在做什么来检查string1在句子中? – iluxa

回答

1

如评论中所述,使用BreakIterator。它为你做了正确的事情。

BreakIterator i=BreakIterator.getSentenceInstance(Locale.US); 
final String text = "Mr. smith and mrs.smith both born on April 2 1970. Barack born on November 4 1960."; 
i.setText(text); 
for(int s=i.first(), e=i.next(); e>=0; s=e, e=i.next()) 
{ 
    System.out.println("Sentence: from "+s+" to "+e+" \""+text.substring(s, e)+'"'); 
} 

一旦知道了句子的边界,就应该知道如何将找到的字符串位置与它匹配​​。

+0

不错的一个,从来没有听说过这个类,但它似乎很棒! – Korgen

+0

这是我的问题的正确解决方案 – user2814979

+0

嗨,BreakIterator将文本分割成有边界的句子,边界的范围从0到n ......但是我的字符串有字节的开始和结束索引。所有的字符串文件索引范围从0到30k或4ok(取决于文件大小)字节大小。我如何检查这3个字符串的开始和结束索引是否找到一个相同的有效句子(其中有边界) – user2814979

0
String[] toCheck = new String[] { ... }; 
String sentence = "....."; 
Boolean allFound = true; 
for (String s : toCheck) { 
    if (sentence.indexOf(s) == -1) { 
     allFound = false; 
    } 
} 
+0

这段代码对于检查句子是否包含3个字符串或不是很有效。但我的问题是不同的。我有3个字符串,包括开始和结束索引。然后我去阅读一个文件位于3个字符串中,然后检查位于同一句子中的这3个字符串 – user2814979

+0

任何使用布尔代替布尔代替的原因是什么? – Holger

相关问题