2013-02-07 14 views
10

Wenn ich Strings vergleiche, verlasse ich mich lieber nicht auf Instanzmethoden, damit der String, auf dem die Methode aufgerufen wird, null ist. In .NET verwende ich einfach die statische Methode String.Compare (string, string, bool). Bietet Java ein ähnliches eingebautes "Null-sicheres" Zeichenfolgen-Vergleichsprogramm oder muss ich mein eigenes implementieren?bietet Java eine eingebaute statische String.Compare-Methode?

+3

Bibliotheken haben das. Es gibt ein Apache StringUtils ich denke, und Android hat TextUtils – njzk2

Antwort

8

Nein, JDK nicht con tain solche Nützlichkeit. Allerdings gibt es mehrere externe Bibliotheken, die das tun. Zum Beispiel org.apache.commons.lang.StringUtils bietet Null-Safe und equalsIgnoreCase(String, String). Guava hat auch ähnliche Hilfsmittel.

1

Ich denke, die Antwort ist nein, Sie haben es wahrscheinlich zu überprüfen, bevor

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

Here some more examples

Wie andere darauf hingewiesen, Apache Commons hat dieses und auch Spring:

StringUtils.hasLength()

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

Gibt es nicht. Apache Commons "StringUtils.equals() tut es so aus:

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)

Es ist der zu vergleichen, die einen int zurückgibt. Es gibt auch gleich, gibt einen booleschen Wert zurück. Wenn Sie eine String-Instanz haben, sollte es möglich sein, auszuführen. Wenn Sie instance.equals (null) übergeben, wird false zurückgegeben. Wenn Ihre Instanz null ist, erhalten Sie einen Nullzeiger.

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: Die Frage war über eine ** statische **, Null-Safe-integrierte Methode zum Vergleichen von Strings, nicht, wie Strings zu vergleichen. –

2

String tut Angebot ein compareTo method, die ohnehin nicht null sicher ist (das heißt Sie Nullwert überprüfen müssen, bevor sie tatsächlich auf das Objekt der comapreTo Methode aufrufen).

Was können Sie tun, ist Ihren eigenen Vergleicher schreiben wie diese

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

die Eigenschaft, um zu überprüfen gerade tun:

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

ich nicht tatsächlich den Code testen, so dass es nehmen als ein allgemeines Beispiel. Der Vorteil ist, dass, obwohl Sie trotzdem auf Null Wert überprüfen müssen, Sie es einmal schreiben und mehrmals verwenden können.

Sie können auch innerhalb der String-Klasse a built in Comparator betrachten.

+0

Ja, ich finde, dass ich diese Art von Code jedem neuen Projekt hinzufüge. Es scheint so, als müsste es einen 'Strings.compare (links, rechts) 'geben, um den Null-Check zu handhaben – Kirby

1

Wenn eine der zu vergleichenden Zeichenfolgen eine Konstante ist, können Sie equals verwenden, da sie null verarbeitet.

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

Wenn Sie zwei Variablen haben, dann können Sie Ihre eigene statische Methode schreiben:

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