匹配java中一行的多个关键字

时间:2012-08-08 10:14:42

标签: java regex

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

实施例,

 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 个答案:

答案 0 :(得分: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

答案 1 :(得分:4)

将国家/地区放入数组并使用小辅助方法。使用Set使它更好,但建立一组国家有点繁琐。像下面这样的东西,但如果愿意,可以使用更好的命名和空值处理:

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

答案 2 :(得分:2)

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

类似的东西,如果要匹配的话

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

以防任何人匹配

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

答案 3 :(得分: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;
}

}

// ----------------- 产量 澳大利亚比赛 印度比赛 英国不符合