2017-08-11 4 views
-2

J'ai besoin d'un programme Java pur pour rechercher sur une chaîne donnée "trouver les mots les uns près des autres" - chaque autre distance doit être spécifiée. Plus spécifiquement dit: - trouve mot1 et mot2 dans n'importe quel ordre, tant qu'ils se produisent à une certaine distance les uns des autres. Par exemple: - pour rechercher un "cancer" et des "problèmes" dans les 3 mots les uns des autres dans une chaîne donnée - si trouvé retour "vrai" sinon retourner "faux".Java: - Recherche de chaîne de manière proche

Chaîne term = "problèmes de cancer"; String text = "Les médecins ont découvert de nombreux problèmes de poitrine liés au cancer au Japon pendant la seconde guerre mondiale."; int distance = 3; // la distance peut varier

Je préfère la solution Java pure plutôt que la solution regex.

+1

"Je préfère la solution pure Java plutôt que la solution regex." - et nous préférons que vous nous montriez ce que vous avez essayé jusqu'ici afin que nous puissions vous aider à résoudre un problème. Nous ne résolvons pas toute la tâche pour vous. – luk2302

+0

@ luk2302 Tout OP a est [montré ici] (https://stackoverflow.com/questions/45598271/java-php-preg-match), je suppose. –

+0

Veuillez suivre le String text = "les médecins ont trouvé de nombreux problèmes liés au cancer au Japon pendant la seconde guerre mondiale."; approche regex 1: - \\ bcancer \\ W +: {1,6} problèmes \\ b approche regex 2 (\\ w + \\ W +?): -? \ b (: (> cancer() | problèmes() | (?> \ 1 | \ 2) \ w +) \ b \ W *?) {0,2} \ 1 \ 2 \ b – sunone5

Répondre

1

Voici une manière très naïve sans regex.

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

Ceci est réellement acceptable. Peut-être que maintenant j'ai une bonne approche. c'est en fait mieux. Merci à @Eritrean – sunone5