15

文字列を比較するとき、メソッドが呼び出される文字列がたまたまnullにならないように、インスタンスメソッドに依存しないことを好みます。.NETでは、静的なString.Compare(string、string、bool)メソッドを使用します。javaは同様の組み込みの「null-safe」文字列比較ユーティリティを提供しますか、それとも独自に実装する必要がありますか?

4

7 に答える 7

12

いいえ、JDKにはそのようなユーティリティは含まれていません。ただし、それを行う外部ライブラリがいくつかあります。たとえば、org.apache.commons.lang.StringUtilsnull-safeequals(String, String)とを提供しますequalsIgnoreCase(String, String)。Guavaにも同様のユーティリティがあります。

于 2013-02-07T15:15:45.953 に答える
2

文字列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);

私は実際にコードをテストしなかったので、一般的な例として取り上げます。利点は、とにかくnull値をチェックする必要がある場合でも、それを1回記述して、数回使用できることです。

Stringクラス内に組み込まれているComparatorを確認することもできます。

于 2013-02-07T15:29:19.980 に答える
2

ありません。ApacheCommons 'StringUtils.equals()は次のように実行します。

public static boolean equals(String str1, String str2) {
    return str1 == null ? str2 == null : str1.equals(str2);
}
于 2013-02-07T15:17:31.987 に答える
1

答えはノーだと思います。おそらく前にチェックする必要があります

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

ここにいくつかの例があります

他の人が指摘しているように、Apache Commonsにはこれがあり、Springもあります。

StringUtils.hasLength()

if(StringUtils.hasLength(myString)) {
    // do something
}
于 2013-02-07T15:14:49.323 に答える
1

equals比較する文字列の1つが、処理時に使用できる定数よりも大きい場合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);
}
于 2013-02-07T15:36:47.450 に答える
1

ここにも同様の質問があり ます。nullセーフのcompareTo()実装を単純化する方法は?

これは、ApacheCommonsObjectUtilsクラスを使用することを賢明にアドバイスします

result = ObjectUtils.compare(left, right);
于 2014-11-18T20:11:10.380 に答える
-2

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

intを返すcompareがあります。ブール値を返すequalsもあります。文字列インスタンスがある場合は、実行できるはずです。instance.equals(null)を渡すと、falseが返されます。インスタンスがnullの場合、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");
    }

}

}
于 2013-02-07T15:26:00.350 に答える