【问题标题】:String.equals() with multiple conditions (and one action on result) [duplicate]String.equals() 具有多个条件(并对结果进行一项操作)[重复]
【发布时间】:2012-04-18 11:04:42
【问题描述】:

有没有可能在 Java for Android 中做这样的事情(这是一个伪代码)

IF (some_string.equals("john" OR "mary" OR "peter" OR "etc."){
   THEN do something
}

?

目前这是通过多个String.equals() 条件完成的,其中||

【问题讨论】:

    标签: java android


    【解决方案1】:

    可能性:

    • 使用String.equals():

      if (some_string.equals("john") ||
          some_string.equals("mary") ||
          some_string.equals("peter"))
      {
      }
      
    • 使用正则表达式:

      if (some_string.matches("john|mary|peter"))
      {
      }
      
    • 在集合中存储要匹配的字符串列表并搜索集合:

      Set<String> names = new HashSet<String>();
      names.add("john");
      names.add("mary");
      names.add("peter");
      
      if (names.contains(some_string))
      {
      }
      

    【讨论】:

    • Java 9+ Set.of("john", "mary").contains(some_string)
    • Set.of 从 Java8 * :-)
    【解决方案2】:
    if (Arrays.asList("John", "Mary", "Peter").contains(name)) {
    }
    
    • 这不如使用准备好的 Set 快,但性能并不比使用 OR 差。
    • name 为 NULL 时不会崩溃(与 Set 相同)。
    • 我喜欢它,因为它看起来很干净

    【讨论】:

      【解决方案3】:

      将可接受的值保存在HashSet 中,并使用contains 方法检查您的字符串是否存在:

      Set<String> accept = new HashSet<String>(Arrays.asList(new String[] {"john", "mary", "peter"}));
      if (accept.contains(some_string)) {
          //...
      }
      

      【讨论】:

      • 这是最有效,恕我直言,最清晰的方式。
      【解决方案4】:

      您当前的实现是正确的。建议是不可能的,但伪代码将通过多个equal() 调用和|| 来实现。

      【讨论】:

      • 谢谢。我使用术语伪只是为了表明它不是我的代码的摘录
      【解决方案5】:

      如果您为 Android KitKat 或更高版本进行开发,您还可以使用 switch 语句(请参阅:Android coding with switch (String))。例如

      switch(yourString)
      {
           case "john":
                //do something for john
           case "mary":
                //do something for mary
      }
      

      【讨论】:

      • Cannot switch on a value of type String for source level below 1.7. Only convertible int values or enum constants are permitted 因为 Android 不支持 Java 1.7,所以这个解决方案不起作用。
      • 如果这两种情况都是真的呢?
      • 你忘了break;
      【解决方案6】:

      不,它检查字符串是否为"john" OR "mary" OR "peter" OR "etc."

      你应该使用||检查

      喜欢.,,if(str.equals("john") || str.equals("mary") || str.equals("peter"))

      【讨论】:

      • samir,up 是伪代码 :)
      【解决方案7】:
      Pattern p = Pattern.compile("tom"); //the regular-expression pattern
      Matcher m = p.matcher("(bob)(tom)(harry)"); //The data to find matches with
      
      while (m.find()) {
          //do something???
      }   
      

      也许可以使用正则表达式来查找匹配项?

      或者创建一个数组

       String[] a = new String[]{
              "tom",
              "bob",
              "harry"
       };
      
       if(a.contains(stringtomatch)){
           //do something
       }
      

      【讨论】:

        猜你喜欢
        • 2020-03-11
        • 1970-01-01
        • 2012-05-12
        • 1970-01-01
        • 2010-11-14
        • 2021-10-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多