przy porównywaniu ciągów wolę nie polegać na metodach instancji, ponieważ łańcuch, na którym jest wywoływana metoda, ma wartość null. W .NET używam tylko statycznej metody String.Compare (string, string, bool). czy java udostępnia podobne wbudowane narzędzie do porównywania ciągów znaków "null-safe" lub czy muszę zaimplementować własne?czy java udostępnia wbudowaną statyczną metodę String.Compare?
Odpowiedz
Nie, JDK nie sprzeciwia się takie narzędzie. Istnieje jednak kilka zewnętrznych bibliotek, które to robią. Na przykład org.apache.commons.lang.StringUtils
zapewnia bezpieczne wartości zerowe equals(String, String)
i equalsIgnoreCase(String, String)
. Guava ma podobne narzędzia.
Myślę, że odpowiedź brzmi nie, masz prawdopodobnie to sprawdzić przed
if(myString != null && myString.equals("string")) {
// do something
}
Jak inni wskazał Apache Commons ma ten, a także wiosny:
if(StringUtils.hasLength(myString)) {
// do something
}
Nie ma. Apache Commons 'StringUtils.equals()
robi to w ten sposób:
public static boolean equals(String str1, String str2) {
return str1 == null ? str2 == null : str1.equals(str2);
}
http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#compareTo(java.lang.String)
Jest to porównać do którego zwraca int. Istnieje również równe, które zwraca wartość boolowską. Jeśli masz instancję typu string, powinno być możliwe wykonanie . Jeśli przekażesz instance.equals (null), zwróci false. jeśli twoja instancja ma wartość null, otrzymasz wskaźnik zerowy.
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: Pytanie dotyczyło ** statycznej **, wbudowanej w bezpieczną null metody porównywania ciągów znaków, a nie porównywania ciągów znaków. –
String robi oferują compareTo method, który i tak nie jest bezpieczny null (czyli trzeba sprawdzić wartość null, zanim faktycznie wywołanie metody comapreTo na obiekcie).
Co można zrobić, to napisać własny komparator jak ten
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;
}
}
Aby zweryfikować własność prostu zrobić:
Comparator<String> comp = new Comparator<String>();
System.out.println(comp.compare(s1, s2);
I nie faktycznie przetestować kod, więc należy go jako ogólny przykład. Korzyścią jest to, że pomimo tego, że mimo wszystko trzeba sprawdzić wartość pustą, można ją zapisać raz i użyć jej kilka razy.
Możesz również rzucić okiem na a built in Comparator wewnątrz klasy String.
Tak, dodałem ten typ kodu do każdego nowego projektu. Wygląda na to, że powinno być 'Strings.compare (left, right)' do obsługi sprawdzania zerowego – Kirby
Jeśli jeden z porównywanych ciągów jest stałą, można użyć wartości equals
, ponieważ obsługuje ona null
.
if("string".equals(mystring)) {
// do something
}
Jeśli masz 2 zmienne, to możesz napisać własną metodę statyczną:
public static boolean stringEquals(String s1, String s2) {
if (s1 == null) {
return s2 == null;
}
return s1.equals(s2);
}
tam podobne pytanie tutaj How to simplify a null-safe compareTo() implementation?
który mądrze radzi używać Commons Apache ObjectUtils
klasa
result = ObjectUtils.compare(left, right);
- 1. Jak wywołać statyczną metodę Java z Gradle
- 2. jmock szyderczy metodę statyczną
- 3. Mockito pomija statyczną metodę testowania
- 4. Jak wywołać prywatną metodę statyczną za pomocą refleksji (Java)?
- 5. PHP - czy można zadeklarować metodę statyczną i niestatyczną?
- 6. Jak zresetować wyśmiewaną metodę statyczną w Groovy?
- 7. W języku Java 8, czy Executors.newWorkStealingPool() również udostępnia kolejkę zadań?
- 8. Czy easy_install udostępnia polecenie wyszukiwania?
- 9. Jak ustawić typową metodę Java?
- 10. Java: jak "zrestartować" klasę statyczną?
- 11. Serializacja Java z inicjalizacją statyczną
- 12. Różnica między różnymi przeciążeń String.Compare
- 13. Jak w prosty sposób wyobrazić metodę statyczną w Javie (jUnit4)?
- 14. Java: Czy rzucanie wyjątku zabija jego metodę?
- 15. Czy możemy utworzyć publiczną statyczną klasę abstrakcji w języku Java?
- 16. Czy Qt udostępnia klasę reprezentującą adres IP?
- 17. Czy log4j udostępnia dowolny mechanizm dziennego archiwum?
- 18. Gdzie powinienem umieścić publiczną metodę statyczną void main (String [] args)?
- 19. W języku Java, jak korzystać z refleksji, aby uzyskać statyczną metodę i wykonać ją?
- 20. Jak wyśmiać statyczną metodę, która zwraca nieważne z PowerMock?
- 21. Jak wyśmiewać statyczną metodę obiektu domeny w Grails?
- 22. Jak mogę obniżyć instancję generowaną przez metodę statyczną?
- 23. Jak mogę sfałszować prywatną metodę statyczną za pomocą PowerMockito?
- 24. Blokadę statyczną w języku Java nie wykonano
- 25. Czy jQuery ma wbudowaną obsługę JSON?
- 26. Czy Python ma wbudowaną strukturę danych linkedList?
- 27. Czy Oracle ma wbudowaną funkcję skrótu?
- 28. Czy Swift ma wbudowaną funkcję logarytmu?
- 29. Czy Ruby ma wbudowaną funkcję ... while?
- 30. Python - sprawdź, czy obiekt jest wbudowaną funkcją
mają to biblioteki. istnieje Apache StringUtils, które myślę, a Android ma TextUtils – njzk2