1

我有一行要匹配多个关键字。应该匹配整个关键字。

例子,

 String str = "This is an example text for matching countries like Australia India England";

 if(str.contains("Australia") ||
    str.contains("India") ||
    str.contains("England")){
    System.out.println("Matches");
 }else{
    System.out.println("Does not match");
 }

这段代码工作正常。但是,如果要匹配的关键字太多,则行会增加。 是否有任何优雅的方式来编写相同的代码? 谢谢

4

4 回答 4

7

你可以这样写一个正则表达式:

Country0|Country1|Country2

像这样使用它:

String str = "This is an example text like Australia India England";

if (Pattern.compile("Australia|India|England").matcher(str).find())     
    System.out.println("Matches");

如果您想知道哪些国家/地区已匹配:

public static void main(String[] args) {

    String str = "This is an example text like Australia India England";

    Matcher m = Pattern.compile("Australia|India|England").matcher(str);
    while (m.find())        
        System.out.println("Matches: " + m.group());
}

输出:

Matches: Australia
Matches: India
Matches: England
于 2012-08-08T10:15:49.237 回答
4

将国家/地区排列起来并使用小助手方法。使用 Set 让它变得更好,但是建立国家集合有点乏味。类似于以下内容,但如果需要,可以使用更好的命名和 null 处理:

String[] countries = {"Australia", "India", "England"};
String str = "NAustraliaA";
if (containsAny(str, countries)) {
    System.out.println("Matches");
}
else {
    System.out.println("Does not match");
}

public static boolean containsAny(String toCheck, String[] values) {
    for (String s: values) {
        if (toCheck.contains(s)) {
            return true;
        }
     }
    return false;
}
于 2012-08-08T10:25:16.803 回答
2

从可读性的角度来看,要匹配的字符串的 ArrayList 将是优雅的。可以形成一个循环来检查单词是否可用,否则它将设置一个标志以指示缺少关键字

类似的东西,以防所有都匹配

for (String checkStr : myList) {
 if(!str.contains(checkStr)) {
 flag=false;
 break;
}
}

万一任何应该匹配

for (String checkStr : myList) {
 if(str.contains(checkStr)) {
 flag=true;
 break;
}
}
于 2012-08-08T10:17:56.283 回答
2
package com.test;

公共类程序{

private String str;

public Program() {
    str = "This is an example text for matching countries like Australia India England";
    // TODO Auto-generated constructor stub
}

public static void main(String[] args) {
    Program program = new Program();
    program.doWork();
}

private void doWork() {

    String[] tomatch = { "Australia", "India" ,"UK"};


    for(int i=0;i<tomatch.length;i++){
    if (match(tomatch[i])) {
        System.out.println(tomatch[i]+" Matches");
    } else {
        System.out.println(tomatch[i]+" Does not match");
    }
    }
}

private boolean match(String string) {

    if (str.contains(string)) {
        return true;
    }

    return false;
}

}

//----------------- 输出澳大利亚匹配印度匹配英国不匹配

于 2012-08-08T10:28:28.493 回答