问题 java提供了一个内置的静态String.Compare方法吗?


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


5470
2018-02-07 15:10


起源

图书馆有这个。我认为有一个apache StringUtils,android有TextUtils - njzk2


答案:


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


8
2018-02-07 15:15





没有。 Apache CommonsStringUtils.equals() 是这样的:

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

2
2018-02-07 15:17





 提供一个 compareTo方法,无论如何都不是空的安全(即你需要在实际调用对象上的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类中。


2
2018-02-07 15:29



是的,我发现自己将这种类型的代码添加到每个新项目中。好像应该有一个 Strings.compare(left, right) 处理空检查 - Kirby


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

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

这里有一些例子

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

StringUtils.hasLength()

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

1
2018-02-07 15:14





这里有一个类似的问题 如何简化null安全的compareTo()实现?

哪个sagely建议使用Apache Commons ObjectUtils 类

result = ObjectUtils.compare(left, right);

1
2017-11-18 20:11





如果要比较的其中一个字符串是常量,则可以使用 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);
}

1
2018-02-07 15:36





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

有比较返回一个int。也有平等 返回一个布尔值。如果你有一个字符串实例,它应该能够 执行。如果传递instance.equals(null),它将返回false。如果你的 如果为null,则将获得空指针。

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");
    }

}

}

-2
2018-02-07 15:26



-1:问题是关于a 静态的,null-safe内置方法来比较Strings,而不是如何比较Strings。 - Xavi López