При сравнении строк я предпочитаю не полагаться на методы экземпляра, чтобы строка, в которой вызван метод, не имеет значения null. В .NET я просто использую метод String.Compare(string, string, bool). делает ли Java аналогичную встроенную "нулевую" утилиту сравнения строк или мне нужно реализовать свою собственную?
Java предоставляет встроенный статический метод String.Compare?
Ответ 1
Нет, JDK не содержит такой утилиты. Однако есть несколько внешних библиотек, которые это делают. Например, org.apache.commons.lang.StringUtils
предоставляет нуль-сейф equals(String, String)
и equalsIgnoreCase(String, String)
. У Гуавы тоже есть подобные утилиты.
Ответ 2
Нет. Apache Commons StringUtils.equals()
делает это следующим образом:
public static boolean equals(String str1, String str2) {
return str1 == null ? str2 == null : str1.equals(str2);
}
Ответ 3
String делает метод compareTo, который в любом случае не является нулевым (т.е. вам нужно проверить значение null до фактического вызова метода comapreTo для объекта).
Что вы можете сделать, так это написать свой собственный компаратор
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);
Я действительно не тестировал код, поэтому рассмотрим его как общий пример. Преимущество в том, что, хотя вам все равно нужно проверить нулевое значение, вы можете написать его один раз и использовать его несколько раз.
Вы также можете взглянуть на встроенный компаратор внутри класса String.
Ответ 4
Я думаю, что ответ отрицательный, вы, вероятно, должны его проверить до
if(myString != null && myString.equals("string")) {
// do something
}
Как указывали другие, Apache Commons имеет это, а также Spring:
if(StringUtils.hasLength(myString)) {
// do something
}
Ответ 5
Если одна из строк для сравнения является константой, вы можете использовать equals
, поскольку она обрабатывает 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);
}
Ответ 6
Здесь есть аналогичный вопрос Как упростить нулевую реализацию compareTo()?
который советует использовать класс Apache Commons ObjectUtils
result = ObjectUtils.compare(left, right);
Ответ 7
http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#compareTo(java.lang.String)
Существует сравнение с которым возвращает int. Существует также равный, который возвращает логическое значение. Если у вас есть экземпляр строки, он должен иметь возможность выполнить. Если вы передадите instance.equals(null), он вернет false. если ваш instance имеет значение 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");
}
}
}