【问题标题】:does java provide a built-in static String.Compare method?java 是否提供了内置的静态 String.Compare 方法?
【发布时间】:2013-02-07 15:10:06
【问题描述】:

在比较字符串时,我不希望依赖实例方法,以免调用该方法的字符串恰好为空。在 .NET 中,我只使用静态 String.Compare(string, string, bool) 方法。 java 是否提供了类似的内置“null-safe”字符串比较实用程序,还是我必须自己实现?

【问题讨论】:

  • 图书馆有。我认为有一个 apache StringUtils,而 android 有 TextUtils

标签: java string static compare


【解决方案1】:

不,JDK 不包含此类实用程序。但是有几个外部库可以做到这一点。例如org.apache.commons.lang.StringUtils 提供空安全equals(String, String)equalsIgnoreCase(String, String)。 Guava 也有类似的实用程序。

【讨论】:

    【解决方案2】:

    没有。 Apache Commons'StringUtils.equals() 这样做:

    public static boolean equals(String str1, String str2) {
        return str1 == null ? str2 == null : str1.equals(str2);
    }
    

    【讨论】:

      【解决方案3】:

      字符串确实提供了一个compareTo method,它无论如何都不是空安全的(即,您需要在实际调用对象上的comapreTo 方法之前检查空值)。

      你能做的就是像这样写你自己的比较器

      class StringComparator implements Comparator<String> {
      
          public int compare(String s1, String s2) {
              if (s1 != null) {
                  return s1.compareTo(s2);
              } else {
                  if (s2 == null) {
                      return 0;
                  } else {
                      return -1;
                  }
          } 
      

      要验证属性,只需执行以下操作:

      Comparator<String> comp = new Comparator<String>();
      System.out.println(comp.compare(s1, s2);
      

      没有实际测试过代码,所以将其作为一般示例。 好处是,即使你无论如何都需要检查空值,你可以编写一次并使用它多次。

      你也可以看看String类里面的a built in Comparator

      【讨论】:

      • 是的,我发现自己在每个新项目中都添加了这种类型的代码。似乎应该有一个Strings.compare(left, right) 来处理空检查
      【解决方案4】:

      我猜答案是否定的,你可能必须先检查一下

      if(myString != null && myString.equals("string")) {
          // do something
      }
      

      Here some more examples

      正如其他人指出的 Apache Commons 有这个,还有 Spring:

      StringUtils.hasLength()

      if(StringUtils.hasLength(myString)) {
          // do something
      }
      

      【讨论】:

        【解决方案5】:

        这里有一个类似的问题 How to simplify a null-safe compareTo() implementation?

        明智地建议使用 Apache Commons ObjectUtils

        result = ObjectUtils.compare(left, right);
        

        【讨论】:

          【解决方案6】:

          如果要比较的字符串之一是常量,则可以使用equals,因为它处理null

          if("string".equals(mystring)) {
              // do something
          }
          

          如果你有 2 个变量,那么你可以编写自己的静态方法:

          public static boolean stringEquals(String s1, String s2) {
              if (s1 == null) {
                  return s2 == null;
              }
              return s1.equals(s2);
          }
          

          【讨论】:

            【解决方案7】:

            http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#compareTo(java.lang.String)

            比较返回一个int。还有等于 返回一个布尔值。如果你有一个字符串实例,它应该能够 执行。如果你通过 instance.equals(null) 它将返回 false。如果你的 实例为空,那么你将得到一个空指针。

            public class App
            {
            
            public static void main( String[] args )
            {
                String myString = "test";
            
                if(myString.equals(null))
                {
                    System.out.println("Its NUll");
                }else
                {
                    System.out.println("Not Equal");
                }
            
            }
            
            }
            

            【讨论】:

            • -1:问题是关于比较字符串的 static、null 安全的内置方法,而不是如何比较字符串。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-09-04
            • 1970-01-01
            • 2020-10-15
            相关资源
            最近更新 更多