如何使用java从给定的字符串中获取完全匹配关键字?

时间:2017-07-20 06:10:04

标签: java regex string-matching

我试图将确切的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;
}

由于

3 个答案:

答案 0 :(得分:1)

您可以通过使用模式和匹配器类来完成此操作

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

如果你想在一行中找到多个匹配项,你可以反复调用find()和group()来全部提取它们。

答案 1 :(得分:0)

以下是使用模式匹配实现目标的方法。

在第一个例子中,我按原样输入了您的输入文本。这只会改进您的算法,该算法具有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);
            }
        }

答案 2 :(得分:0)

@sithum - 谢谢,但它在输出中执行if else的条件。请参阅我附加的屏幕截图。 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

我应用了以下逻辑,它运行正常。请参考,谢谢。

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