when comparing strings I prefer not to rely on instance methods lest the string on which the method is called happens to be null. In .NET I just use the static String.Compare(string, string, bool) method. does java provide a similar built-in "null-safe" string compare utility or do I have to implement my own?
7 回答
不,JDK 不包含此类实用程序。但是有几个外部库可以做到这一点。例如org.apache.commons.lang.StringUtils提供 null-safeequals(String, String)和equalsIgnoreCase(String, String). Guava 也有类似的实用程序。
String确实提供了一个compareTo 方法,它无论如何都不是 null 安全的(即,在实际调用对象上的 comapreTo 方法之前,您需要检查 null 值)。
您可以做的是像这样编写自己的比较器
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 类中的内置 Comparator 。
没有。Apache Commons这样StringUtils.equals()做:
public static boolean equals(String str1, String str2) {
    return str1 == null ? str2 == null : str1.equals(str2);
}
    如果要比较的字符串之一是一个常量,则可以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);
}
    这里有一个类似的问题 如何简化空安全的 compareTo() 实现?
明智地建议使用 Apache CommonsObjectUtils类
result = ObjectUtils.compare(left, right);
    我想答案是否定的,您可能必须先检查一下
if(myString != null && myString.equals("string")) {
    // do something
}
正如其他人指出的 Apache Commons 有这个,还有 Spring:
if(StringUtils.hasLength(myString)) {
    // do something
}
    http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#compareTo(java.lang.String)
有一个返回 int 的比较。还有返回布尔值的equals。如果您有一个字符串实例,它应该能够执行。如果你通过 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");
    }
}
}