【问题标题】:Java :- String search in proximity mannerJava :- 以邻近方式进行字符串搜索
【发布时间】:2017-08-11 09:17:42
【问题描述】:

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

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

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

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

【问题讨论】:

  • “我更喜欢纯 Java 解决方案而不是正则表达式解决方案。” - 我们更希望您向我们展示您迄今为止所做的尝试,以便我们帮助您解决问题。我们不会为您解决全部任务。
  • @luk2302 我猜所有 OP 都是 shown here
  • 请按照 String text = "医生在二战期间在日本发现许多与癌症相关的问题。";正则表达式方法 1 : - \\bcancer\\W+(?:\\w+\\W+){1,6}?problems\\b 正则表达式方法 2 :- \b(?:(?>cancer()|problems( )|(?>\1|\2)\w+)\b\W*?){0,2}\1\2\b
  • @Wiktor Stribiżew 感谢您的提及。你之前已经注意到了。
  • 你的问题还不清楚,抱歉。

标签: java regex algorithm search full-text-search


【解决方案1】:

这是一种没有正则表达式的非常幼稚的方法。

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

【讨论】:

  • 这其实是可以接受的。可能现在我有一些好的方法。它实际上更好。感谢@Eritrean
猜你喜欢
  • 1970-01-01
  • 2012-04-15
  • 1970-01-01
  • 2018-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-11
相关资源
最近更新 更多