2017-09-03 2 views
0

J'ai une hashmap qui a des clés. les touches peuvent être n'importe quelle combinaison de mots d'une phrase donnée. J'essaye d'écrire la logique pour trouver si une sous-chaîne possible d'une phrase donnée est présente dans la carte comme une clé ou pas, mais n'obtenant pas de résultat.Java: Comparer chaque paire de mots de la sous-chaîne dans une phrase pour trouver si elle est la clé dans hashmap

String = "C'est mon sac que j'ai acheté hier". HashMap clés: première clé = « est mon » deuxième clé = « que j'ai acheté »

Le code que je l'ai écrit, mais je ne reçois pas résultat:

private static String getSubStringToMatch(String[] s){ 
     String temp = ""; 
     int counter = frequencyOfConcatenation; 
     for(int j = 0; j< s.length;j++){ 
      for(int i = 0; i<counter;i++){ 
       temp = temp +" "+ s[i]; 
      } 
      System.out.println(returnSubString(temp.split(" "))); 
      temp = ""; 
      counter--; 
     } 
     return temp;  
    } 

    private static String returnSubString(String[] string){ 
     String s = ""; 
     for(int i= 0; i<string.length;i++){ 
      s=s+" "+string[i]; 
     } 
     return s.trim().toUpperCase(); 
    } 
+0

Pouvez-vous indiquer clairement l'exigence de la «clé»? L'algorithme doit-il gérer toutes les permutations des sous-chaînes? L'ensemble des sous-chaînes doit être contigu ou non? –

+0

oui il faut gérer toutes les permutations car on ne sait pas quelle combinaison peut être la clé – Rishi

+0

oui il faut qu'elle soit contiguë. – Rishi

Répondre

0

Je ne pense que trouver toutes les sous-chaînes possibles d'une phrase est le meilleur moyen d'atteindre votre objectif ici.

Voici une autre option: Nous avons un HashMap<String, Object> map de sous-chaînes de phrases à une certaine valeur.

Nous pouvons regarder cette carte avec une phrase par l'appel de flux suivant:

List<Object> objectsThatMatchSentence = map.entrySet().stream() 
      .filter(entry -> sentence.contains(entry.getKey())) 
      .map(entry -> entry.getValue()) 
      .collect(Collectors.toList()); 

Cette boucle sur toutes les entrées de la table de hachage, et filtre les clés qui ne sont pas contenus dans la sentence variable. Il mappe ensuite chaque entrée à la valeur associée, puis renvoie une liste de ces valeurs, qui est une liste d'objets correspondant à vos besoins.