2017-07-20 4 views
0

J'essaie de faire correspondre exactement le mot-clé AdvanceJava avec la chaîne inputText donnée, mais il exécute à la fois if et else condition, au lieu de ne faire correspondre que le mot-clé AdvanceJava.Comment obtenir le mot-clé exact de la chaîne donnée en utilisant java?

String inputText = ("iwanttoknowrelatedtoAdvancejava").toLowerCase().replaceAll("\\s", ""); 

String match = "java"; 
List keywordsList = new ArrayList<>();//where keywordsList{advance,core,programming} -> keywordlist fetch 
// from database 

Enumeration e = Collections.enumeration(keywordsList); 
int size = keywordsList.size(); 
while (e.hasMoreElements()) { 
    for (int i = 0; i < size; i++) { 
     String s1 = (String) keywordsList.get(i); 
     if (inputText.contains(s1) && inputText.contains(match)) { 
      System.out.println("Yes we providing " + s1); 
     } else if (!inputText.contains(s1) && inputText.contains(match)) { 
      System.out.println("Yes we are working on java"); 
     } 
    } 
    break; 
} 

Merci

+0

simplement ajouter à votre temps un chèque de drapeau et quand vous avez trouvé le mot pour changer le drapeau – Edwin

+0

Je suppose que vous avez à la fois '' java' et advancedjava' dans la liste des mots clés. Donc, vous pouvez le résoudre en utilisant '(?

+0

Wiktor Stribiżew - KeywordList contient uniquement des mots clés "avance, noyau, programmation" dans String s1 comme indiqué dans le code et String match = "java" mot-clé est défini statique, pendant ce temps j'essaie de vérifier si ma chaîne inpuText contient à la fois avance et java mots-clés que le code de si la condition s'exécute bien mais si ma chaîne inpuText ne contient pas de mot-clé d'avance contient uniquement le mot-clé java que ma condition else s'exécute. Mais ça ne marche pas dans ce format. Merci –

Répondre

0

@sithum - Merci, mais il exécute les deux conditions d'if sinon dans la sortie.S'il vous plaît se référer Screen Shot que j'ai attaché ici. We want only if condition executes because our statement contains Advance Java thus only statement of If condition executes here by using the code which you provide it executes both statements of if else condition. Thanks

J'ai appliqué la logique suivante et cela fonctionne très bien. s'il vous plaît se référer, merci.

String inputText = ("iwanttoknowrelatedtoAdvancejava").toLowerCase().replaceAll("\\s", ""); 
    String match = "java"; 
    List<String> keywordsList = session.createSQLQuery("SELECT QUESTIONARIES_RAISED FROM QUERIES").list(); // Fetch values from database (advance,core,programming) 
    String uniqueKeyword=null; 
    String commonKeyword= null; 
    int size =keywordsList.size(); 
    for(int i=0;i<size;i++){ 
       String s1 = (String) keywordsList.get(i);//get values one by one from list 
    if(inputText.contains(match)){ 
    if(inputText.contains(s1) && inputText.contains(match)){ 
    Queries q1 = new Queries(); 
    q1.setQuestionariesRaised(s1); //set matched keyword to getter setter method 
    keywordsList1=session.createQuery("from Queries sentence where questionariesRaised='"+q1.getQuestionariesRaised()+"'").list(); // based on matched keyword fetch according to matched keyword sentence which stored in database 
    for(Queries ob : keywordsList1){ 

    uniqueKeyword= ob.getSentence().toString();// Store fetched sentence to on string variable 
     } 
    break; 
    }else { 
     commonKeyword= "java only"; 
     } 
     } 
    }} 
    if(uniqueKeyword!= null){ 
    System.out.println("Yes we providing......................" + uniqueKeyword);   
    }else if(commonKeyword!= null){ 
    System.out.println("Yes we providing " + commonKeyword); 
    }else{  
} 
1

vous pouvez simplement le faire en utilisant des classes de motif et matcher

Pattern p = Pattern.compile("java"); 
    Matcher m = p.matcher("Print this"); 
    m.find(); 

Si vous voulez trouver plusieurs correspondances en ligne, vous pouvez appeler trouver() et le groupe () à plusieurs reprises pour les extraire tous.

+0

Désolé, Mayank Sharma ce code exécute à la fois si et sinon la condition dans mon cas. Merci –

0

Voici comment vous pouvez réaliser ce que vous cherchez en utilisant la correspondance de formes.

Dans le premier exemple, j'ai pris votre texte d'entrée tel quel. Cela améliore seulement votre algorithme qui a des performances O (n^2).

String inputText = ("iwanttoknowrelatedtoAdvancejava").toLowerCase().replaceAll("\\s", ""); 

     String match = "java"; 
     List<String> keywordsList = Arrays.asList("advance", "core", "programming"); 

     for (String keyword : keywordsList) { 
      Pattern p = Pattern.compile(keyword.concat(match)); 

      Matcher m = p.matcher(inputText); 
      //System.out.println(m.find()); 
      if (m.find()) { 
       System.out.println("Yes we are providing " + keyword.concat(match)); 
      } 
     } 

Mais nous pouvons améliorer cela dans une meilleure implémentation. Voici une version plus générique de l'implémentation ci-dessus. Ce code ne manipule pas le texte d'entrée avant la correspondance, nous fournissons plutôt une expression régulière plus générique qui ignore les espaces et correspond à la casse de manière insensible.

String inputText = "i want to know related to Advance java"; 

     String match = "java"; 
     List<String> keywordsList = Arrays.asList("advance", "core", "programming"); 

     for (String keyword : keywordsList) { 
      Pattern p = Pattern.compile(MessageFormat.format("(?i)({0}\\s*{1})", keyword, match)); 
      Pattern p1 = Pattern.compile(MessageFormat.format("(?i)({0})", match)); 

      Matcher m = p.matcher(inputText); 
      Matcher m1 = p1.matcher(inputText); 
      //System.out.println(m.find()); 
      if(m.find()) { 
       System.out.println("Yes we are providing " + keyword.concat(match)); 
      } else if(m1.find()) { 
       System.out.println("Yes we are working with " + match); 
      } 
     } 
+0

sithum - Merci mais si seulement java existe dans ma chaîne au lieu de java que comment gérer cela en utilisant le même code en invoquant la condition else? Merci –

+0

Je ne suis pas tout à fait clair sur cette exigence. Voulez-vous dire si le texte est comme "je veux savoir lié à Java" alors il devrait être manipulé en utilisant une autre condition? – sithum

+0

Sithum - Yup exactement.Pour cela que dois-je mettre en œuvre dans ce même code? Merci –