文字列を比較するとき、メソッドが呼び出される文字列がたまたまnullにならないように、インスタンスメソッドに依存しないことを好みます。.NETでは、静的なString.Compare(string、string、bool)メソッドを使用します。javaは同様の組み込みの「null-safe」文字列比較ユーティリティを提供しますか、それとも独自に実装する必要がありますか?
7 に答える
いいえ、JDKにはそのようなユーティリティは含まれていません。ただし、それを行う外部ライブラリがいくつかあります。たとえば、org.apache.commons.lang.StringUtils
null-safeequals(String, String)
とを提供しますequalsIgnoreCase(String, String)
。Guavaにも同様のユーティリティがあります。
文字列は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を確認することもできます。
ありません。ApacheCommons 'StringUtils.equals()
は次のように実行します。
public static boolean equals(String str1, String str2) {
return str1 == null ? str2 == null : str1.equals(str2);
}
答えはノーだと思います。おそらく前にチェックする必要があります
if(myString != null && myString.equals("string")) {
// do something
}
他の人が指摘しているように、Apache Commonsにはこれがあり、Springもあります。
if(StringUtils.hasLength(myString)) {
// do something
}
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);
}
ここにも同様の質問があり ます。nullセーフのcompareTo()実装を単純化する方法は?
これは、ApacheCommonsObjectUtils
クラスを使用することを賢明にアドバイスします
result = ObjectUtils.compare(left, right);
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");
}
}
}