2017-08-11 38 views
-2

我需要一個純Java程序來搜索給定的字符串以「找到彼此靠近的字」 - 需要指定每個其他距離。 更具體地說: - 發現word1和word2的任何順序,只要它們發生在彼此的一定距離內。例如: - 在給定字符串中相互3個字內搜索「癌症」和「問題」 - 如果找到則返回「true」,否則返回「false」。Java: - 以接​​近的方式搜索字符串

String term =「cancer problems」; String text =「第二次世界大戰期間,醫生在日本發現許多癌症相關的胸部問題。」; int distance = 3; //距離可能不同

我更喜歡純粹的Java解決方案,而不是正則表達式解決方案。

+1

「我更喜歡純Java解決方案,而不是正則表達式解決方案。」 - 我們希望您向我們展示您迄今爲止所嘗試的內容,以便我們幫助您解決問題。我們沒有爲你解決整個任務。 – luk2302

+0

@ luk2302所有的OP都有[顯示在這裏](https://stackoverflow.com/questions/45598271/java-php-preg-match),我想。 –

+0

請按照 String text =「醫生在第二次世界大戰期間在日本發現許多與癌症有關的問題」。 正則表達式的方法1: - \\ bcancer \\ W +:{1,6} \\問題; B 正則表達式的方法2(\\ W + \\ W +): - ???? \ B(:(>癌症()|問題()|(?> \ 1 | \ 2)\ w +)\ b \ W *?){0,2} \ 1 \ 2 \ b – sunone5

回答

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

這實際上是可以接受的。可能現在我有一些很好的方法。它實際上更好。感謝@Eritrean – sunone5