我有一行可以匹配多个关键字。整个关键字应该匹配。
实施例,
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");
}
此代码工作正常。但如果要匹配的关键字过多,则该行会增长。 有没有优雅的方法来编写相同的代码? 感谢
答案 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;
}
}
// ----------------- 产量 澳大利亚比赛 印度比赛 英国不符合