检测字符串是否包含多个单词的更好方法

2022-09-01 19:50:32

我正在尝试创建一个程序,该程序可以尽快检测字符串中是否有多个单词,如果是,则执行行为。最好是,我希望它也能检测这些单词的顺序,但前提是可以快速完成。到目前为止,这就是我所做的:

if (input.contains("adsf") && input.contains("qwer")) {
    execute();          
}

如您所见,对多个单词执行此操作会变得令人厌烦。这是唯一的方法,还是有更好的方法来检测多个子字符串?有没有办法检测订单?


答案 1

我会从单词中创建一个正则表达式:

Pattern pattern = Pattern.compile("(?=.*adsf)(?=.*qwer)");
if (pattern.matcher(input).find()) {
    execute();
}

有关更多详细信息,请参阅此答案:https://stackoverflow.com/a/470602/660143


答案 2

编者按:尽管被大量投票和接受,但这与问题中的代码功能不同。 在第一个匹配项上调用,类似于逻辑 OR。execute

您可以使用数组:

String[] matches = new String[] {"adsf", "qwer"};

bool found = false;
for (String s : matches)
{
  if (input.contains(s))
  {
    execute();
    break;
  }
}

这与您发布的版本一样有效,但更易于维护。寻找更有效的解决方案听起来像是一个微优化,应该被忽略,直到被证明是代码的瓶颈,在任何情况下,对于一个巨大的字符串集,解决方案可能是一个三重奏。