簡體   English   中英

如何使用Java從給定的字符串中獲取完全匹配關鍵字?

[英]How to get exact match keyword from the given string using java?

我試圖將精確的AdvanceJava關鍵字與給定的inputText字符串匹配,但是它同時執行if和else條件,而不是我只希望匹配AdvanceJava關鍵字。

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

謝謝

您可以簡單地通過使用模式和匹配器類來做到這一點

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

如果要在一行中找到多個匹配項,則可以重復調用find()和group()來提取所有匹配項。

這是使用模式匹配可以實現的目標的方法。

在第一個示例中,我按原樣輸入了您的輸入文本。 這只會改善具有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));
            }
        }

但是我們可以改進它以更好地實現。 這是上述實現的更通用的版本。 這段代碼不會在匹配之前操縱輸入文本,而是提供了一個更通用的正則表達式,該表達式忽略空格並匹配不區分大小寫的方式。

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

@sithum-謝謝,但是它在輸出中同時執行了if的兩個條件。請參閱我在此處附加的屏幕截圖。 我們只希望條件執行,因為我們的語句包含高級Java,因此只有if條件的語句在這里執行,方法是使用您提供的代碼執行if else條件的兩個語句。謝謝

我應用了以下邏輯,並且工作正常。 請參考,謝謝。

    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{      
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM