【问题标题】:Simplify several boolean conditions java [duplicate]简化几个布尔条件java [重复]
【发布时间】:2014-07-29 21:52:04
【问题描述】:

你会如何简化所有这些条件?

String s = "The wold is big"

if(s.contains("is") || s.contains("are") || s.contains("was") || s.contains("were")) 
{ 
    return s;
}

既然我必须检查几个这样的情况,有没有办法简化所有这些条件?

【问题讨论】:

  • Use regex。正则表达式很神奇,可以为您节省很多时间。
  • @amphetamachine 我会考虑的。谢谢。
  • @paisanco 我没看到对不起!
  • 没有必要道歉,只是指出来。欢迎来到 SO。

标签: java string boolean booleanquery


【解决方案1】:

我会为此编写一个实用方法:

public static boolean containsAny(String s, String... words) {
    for (String word : words) {
        if (s.contains(word))
            return true;
    }
    return false;
}

现在:

if (containsAny(s, "is", "are", "was", "were")) {...}

Java 8 替代方案:

if (Arrays.asList("is", "are", "was", "were").stream().anyMatch(s::contains)) {...}

【讨论】:

  • 是的,这是我认为的唯一解决方案,很遗憾没有其他办法!
  • @Josh 我添加了一个 Java 8 替代方案,以防万一适用于您。
  • 我非常感谢 java 8 替代方案;)谢谢!
【解决方案2】:

您可以使用 regex 使用Stringmatches 方法

样本:

String s = "The wold is big";

    if (s.matches("(.*)(is|are|was|were)(.*)")) {
        System.out.println("lawl");
    }

【讨论】:

  • 不能把正则表达式简化为"is|are|was|were"
  • 我只想补充一点,即使它会找到匹配 is are was were 的字符串,它也必须遍历整个字符串。原始解决方案(或arshajii approach)更快。
  • @Pshemo 他只是想用更少的代码来简化它。
  • 我并不是说你的答案不正确(我也不是反对者),只是指出这是一种交易:更少的代码可能会降低性能(在长文本的情况下)。
  • @Pshemo 如果 were 是文件中的单词,那么 arshajii 的方法必须遍历文本 3 次以上,而这只遍历一次。
【解决方案3】:

真的没有更快的方法来做到这一点。只有当你有很多它们时,将它们放在一个数组中并遍历数组会更干净。

也在这里回答: Test if a string contains any of the strings from an array

【讨论】:

    【解决方案4】:

    您可以传递一个值数组来检查:

    public boolean Contains(String[] list, String elem) {
        for (String s: list){
            if(elem.contains(s)) {
                return true;
            }
        }
        return false;
    }
    
    String s = "The wold is big"
    String[] conditions = {"is","are","was","were"}; 
    
    if(Contains(conditions,s)) 
    { 
        return s;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-17
      • 2015-05-18
      • 1970-01-01
      • 2016-10-29
      • 1970-01-01
      • 2020-08-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多