java是否提供内置的静态String.Compare方法?

java是否提供内置的静态String.Compare方法?,java,string,static,compare,Java,String,Static,Compare,在比较字符串时,我不喜欢依赖实例方法,以免调用该方法的字符串恰好为空。在.NET中,我只使用静态String.Compare(String,String,bool)方法。java是否提供了类似的内置“空安全”字符串比较实用程序,还是我必须实现自己的工具?我想答案是否定的,您可能需要先检查一下 if(myString != null && myString.equals("string")) { // do something } 正如其他人指出的那样,Apache C

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

我想答案是否定的,您可能需要先检查一下

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

正如其他人指出的那样,Apache Commons和Spring都有这样的功能:


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

没有是这样的吗

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

有一个compare,返回一个int,还有一个equals,返回一个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");
    }

}

}

String确实提供了一个值,但它无论如何都不是空值安全的(即,在实际调用对象上的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;
            }
    } 
类StringComparator实现Comparator{
公共整数比较(字符串s1、字符串s2){
如果(s1!=null){
返回s1.compareTo(s2);
}否则{
if(s2==null){
返回0;
}否则{
返回-1;
}
} 
要验证属性,只需执行以下操作:

Comparator<String> comp = new Comparator<String>();
System.out.println(comp.compare(s1, s2);
Comparator comp=新的比较器();
系统输出打印LN(组件比较(s1,s2);
我实际上并没有测试代码,所以把它作为一个通用的例子。 好处是,即使您需要检查null值,也可以编写一次并多次使用它


您还可以查看String类内部。

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

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

这里有一个类似的问题

明智地建议使用ApacheCommons
ObjectUtils

result = ObjectUtils.compare(left, right);

库有这样的功能。我认为有一个apache StringUtils,android有TextUtils-1:问题是关于一个静态的、空安全的内置方法来比较字符串,而不是如何比较字符串。是的,我发现自己在每个新项目中都添加了这种类型的代码。似乎应该有一个
Strings.compare(左,右)
处理空检查
result = ObjectUtils.compare(left, right);