2013-02-07 9 views
10

Dizeleri karşılaştırırken, yöntemin çağrıldığı dizenin boş olması durumunda, örnek yöntemlerine güvenmemeyi tercih ederim. .NET'te sadece static String.Compare (string, string, bool) yöntemini kullanıyorum. java benzer bir yerleşik "null-safe" dizesi ile yardımcı programı karşılaştırıyor mu yoksa kendi başımı mı uygulamak zorundayım?java yerleşik bir statik String.Compare yöntemi sağlıyor mu?

+3

kitaplıklarında bunu bulabilirsiniz. Ben bir apache StringUtils olduğunu düşünüyorum, ve android TextUtils – njzk2

cevap

8

Hayır, JDK uyumlu değil tain böyle bir yardımcı program. Ancak bunu yapan birkaç harici kütüphane var. Örneğin org.apache.commons.lang.StringUtils, boş güvenli equals(String, String) ve equalsIgnoreCase(String, String) sağlar. Guava'nın da benzer araçları var.

1

Diğerleri işaret ettiğine

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

Here some more examples

önce kontrol etmek muhtemelen, cevap hayır tahmin Apache Commons bu, hem de bahar vardır:

StringUtils.hasLength()

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

Yok. Apache Commons 'StringUtils.equals() bu şekilde yapar:

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)

karşılaştırmak vardır bir int döndüren için. 'un bir boole döndürdüğü de eşittir. Bir dize örneğiniz varsa, yürütme yapabilmelidir. Eğer instance.equals (null) iletirseniz, false döner. senin örneğiniz boşsa, o zaman boş bir işaretçi alırsınız.

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 var: Soru Strings karşılaştırmak için değil, Strings karşılaştırmak için ** statik **, null güvenli yerleşik bir yöntem hakkındaydı. –

2

Dize yine boş-güvenli değildir teklif bir compareTo method, (aslında nesne üzerinde comapreTo yöntemini çağırmadan önce boş değere için kontrol edilmesi gereken diğer bir deyişle) yapar. Ne yapabilirsiniz

sadece yapmak özelliğini doğrulamak için bu

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

gibi kendi Karşılaştırıcısı yazmak geçerli:

Comparator<String> comp = new Comparator<String>(); 
System.out.println(comp.compare(s1, s2); 

Ben aslında kodu test, bu yüzden almadı genel bir örnek olarak. Buradaki yarar, null değerini neyse kontrol etmenize rağmen, bir kez yazıp birkaç kez kullanabilirsiniz.

Ayrıca String sınıfının içinde a built in Comparator'a da bakabilirsiniz.

+0

Evet, bu yeni kodu her yeni projeye eklediğimi buluyorum. Null check işlemek için bir 'Strings.compare (left, right)' olması gerektiği gibi görünüyor – Kirby

1

Karşılaştırılacak dizelerden biri, null'u işlediğinden equals'u kullanabildiğiniz sabittir.Eğer 2 değişkeni varsa sonra kendi statik yöntemi yazabilir

if("string".equals(mystring)) { 
    // do something 
} 

:

public static boolean stringEquals(String s1, String s2) { 
    if (s1 == null) { 
     return s2 == null; 
    } 
    return s1.equals(s2); 
} 
İlgili konular