Java:-以邻近方式进行字符串搜索

Java:-以邻近方式进行字符串搜索,java,regex,algorithm,search,full-text-search,Java,Regex,Algorithm,Search,Full Text Search,我需要一个纯Java程序来搜索给定的字符串,以“找到彼此靠近的单词”——需要指定彼此的距离。 更具体地说:-查找任何顺序的单词1和单词2,只要它们出现在彼此的某个距离内 例如:-要在给定字符串中搜索彼此相隔3个单词的“癌症”和“问题”-如果找到返回“true”,否则返回“false” 字符串term=“癌症问题”; String text=“二战期间,医生在日本发现了许多与癌症相关的胸部问题。”; 整数距离=3;//距离可能会有所不同 我更喜欢纯Java解决方案,而不是正则表达式解决方案 这是一

我需要一个纯Java程序来搜索给定的字符串,以“找到彼此靠近的单词”——需要指定彼此的距离。 更具体地说:-查找任何顺序的单词1和单词2,只要它们出现在彼此的某个距离内

例如:-要在给定字符串中搜索彼此相隔3个单词的“癌症”和“问题”-如果找到返回“true”,否则返回“false”

字符串term=“癌症问题”; String text=“二战期间,医生在日本发现了许多与癌症相关的胸部问题。”; 整数距离=3;//距离可能会有所不同


我更喜欢纯Java解决方案,而不是正则表达式解决方案

这是一种没有正则表达式的非常简单的方法

public class NotElegant {

    public static void main(String[] args){
        String text = "doctors found many cancer related chest problems in japan during second world war.";
        String term = "cancer problems";
        System.out.println(getWordsNearEachOther(text,term,3));
    }
    public static String getWordsNearEachOther(String text, String term, int distance){
        String word1= term.split(" ")[0];
        String word2= term.split(" ")[1];
        String firstWord = text.indexOf(word1)<text.indexOf(word2)?word1:word2;
        String secondWord = text.indexOf(word1)<text.indexOf(word2)?word2:word1;
        if(!(text.contains(word1) && text.contains(word2))){
            return null;
        }        
        else if(text.substring(text.indexOf(firstWord), text.indexOf(secondWord)+secondWord.length()).split(" ").length>distance+1){
            return null;
        }
        return text.substring(text.indexOf(firstWord), text.indexOf(secondWord)+secondWord.length());
    }
}
公共类NotElegant{
公共静态void main(字符串[]args){
String text=“二战期间,医生在日本发现了许多与癌症相关的胸部问题。”;
字符串term=“癌症问题”;
System.out.println(getWordsNearEachOther(text,term,3));
}
公共静态字符串GetWordsAreaChother(字符串文本、字符串术语、整数距离){
字符串word1=term.split(“”[0];
String word2=term.split(“”[1];

String firstWord=text.indexOf(word1)“我更喜欢纯Java解决方案,而不是正则表达式解决方案。”-我们更喜欢您向我们展示您迄今为止所做的尝试,以便我们可以帮助您解决问题。我们并不是为您解决整个任务。@luk2302我想OP所拥有的是。请遵循字符串文本=“第二次世界大战期间,医生在日本发现了许多与癌症有关的问题。”正则表达式方法1:-\\b癌症\\W+(?:\\W+\\W+){1,6}问题\\b正则表达式方法2:-\b(?:(?>癌症()|问题()|(?>\1|2)\W+\b\W*?){0,2}\1\2\b@WiktorStribiżew谢谢你的提及。你之前已经注意到了。你的问题仍然不清楚,抱歉。这实际上是可以接受的。也许现在我有了一些好方法。这实际上是更好的方法。谢谢@厄立特里亚人