2013-02-07 22 views
10

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

+3

ライブラリには、私が思うには、apacheのStringUtilsがあります。androidにはTextUtilsがあります。 – njzk2

答えて

8

いいえ、JDKは詐欺ではありませんそのような有用性はない。しかし、これを行ういくつかの外部ライブラリがあります。たとえば、org.apache.commons.lang.StringUtilsは、ヌルセーフのequals(String, String)equalsIgnoreCase(String, String)を提供します。 Guavaも同様のユーティリティを持っています。

1

私は他の人が指摘したように答えはありません、あなたが

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

Here some more examples

前にそれをチェックするために、おそらく持っているのApache Commonsのは、これを持って、そしてまた春推測:

StringUtils.hasLength()

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

ありません。 Apache Commonsは「StringUtils.equals()はこのようにそれを行います。

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

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

をint型を返すと比較があります。また、 がブール値を返す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"); 
    } 

} 

} 
+1

-1:質問は静的**、文字列を比較する方法ではなく、文字列を比較するnull安全な組み込みメソッドに関するものです。 –

2

文字列はとにかく(すなわち、あなたが実際にオブジェクトにcomapreToメソッドを呼び出す前に、NULL値をチェックする必要があります)、nullでは安全ではありません提供compareTo methodを行います。あなたは何ができるか

だけで行うプロパティを確認するには、この

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

私はが実際にコードをテストするので、それを取ることはありませんでした一般的な例として。 利点は、とにかくヌル値をチェックする必要がある場合でも、一度それを書いて何度も使用できることです。

また、a built in ComparatorをStringクラスの中で見ることができます。

+0

はい、新しいプロジェクトごとにこのタイプのコードを追加しています。ヌルチェックを処理するために 'Strings.compare(左、右)'であるべきであるように思えます – Kirby

1

比較する文字列のいずれかが定数より大きい場合は、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); 
} 
関連する問題