Как я могу проверить строку на нулевое значение в Java? Я использую
stringname.equalsignorecase(null)
но это не работает.
Как я могу проверить строку на нулевое значение в Java? Я использую
stringname.equalsignorecase(null)
но это не работает.
Ответы:
string == null
сравнивает, если объект равен нулю. string.equals("foo")
сравнивает значение внутри этого объекта. string == "foo"
не всегда работает, потому что вы пытаетесь увидеть, одинаковы ли объекты, а не значения, которые они представляют.
Более длинный ответ:
Если вы попробуете это сделать, это не сработает, как вы обнаружили:
String foo = null;
if (foo.equals(null)) {
// That fails every time.
}
Причина в том, что foo имеет значение null, поэтому он не знает, что такое .equals; там нет объекта, из которого можно было бы вызвать .equals.
Вероятно, вы хотели:
String foo = null;
if (foo == null) {
// That will work.
}
Типичный способ защитить себя от нуля при работе со строками:
String foo = null;
String bar = "Some string";
...
if (foo != null && foo.equals(bar)) {
// Do something here.
}
Таким образом, если foo имеет значение null, он не оценивает вторую половину условного выражения, и все в порядке.
Самый простой способ, если вы используете строковый литерал (вместо переменной):
String foo = null;
...
if ("some String".equals(foo)) {
// Do something here.
}
Если вы хотите обойти это, в Apache Commons есть класс StringUtils, который обеспечивает нулевые безопасные операции со строками .
if (StringUtils.equals(foo, bar)) {
// Do something here.
}
Другой ответ был шутливым и сказал, что вы должны сделать это:
boolean isNull = false;
try {
stringname.equalsIgnoreCase(null);
} catch (NullPointerException npe) {
isNull = true;
}
Пожалуйста, не делай этого. Вы должны выдавать исключения только для исключительных ошибок; если вы ожидаете нулевого значения, вы должны проверить его заранее и не позволять ему вызывать исключение.
На мой взгляд, для этого есть две причины. Во-первых, исключения происходят медленно; проверка на null выполняется быстро, но когда JVM выдает исключение, это занимает много времени. Во-вторых, код будет намного проще читать и поддерживать, если вы просто заранее проверите наличие нулевого указателя.
s == null
не сработает?
equals()
если хотите сравнить значения . Но если вы хотите проверить, есть ли переменная null
, вы используете ==
.
Конечно, работает. Вы упускаете важную часть кода. Вам просто нужно сделать вот так:
boolean isNull = false;
try {
stringname.equalsIgnoreCase(null);
} catch (NullPointerException npe) {
isNull = true;
}
;)
Используйте метод TextUtils, если вы работаете в Android.
TextUtils.isEmpty (str) : возвращает значение true, если строка имеет значение NULL или нулевую длину. Параметры: str проверяемая строка. Возвращает: true, если str имеет нулевую или нулевую длину.
if(TextUtils.isEmpty(str)) {
// str is null or lenght is 0
}
Ниже приведен исходный код этого метода. Вы можете использовать директиву.
/**
* Returns true if the string is null or 0-length.
* @param str the string to be examined
* @return true if str is null or zero length
*/
public static boolean isEmpty(CharSequence str) {
if (str == null || str.length() == 0)
return true;
else
return false;
}
Если мы посмотрим на реализацию метода equalsIgnoreCase, мы найдем эту часть:
if (string == null || count != string.count) {
return false;
}
Таким образом, он всегда будет возвращаться, false
если аргумент есть null
. И это, очевидно, правильно, потому что единственный случай, когда он должен возвращаться, true
- это когда equalsIgnoreCase был вызван для a null String
, но
String nullString = null;
nullString.equalsIgnoreCase(null);
обязательно приведет к исключению NullPointerException.
Таким образом, методы equals не предназначены для проверки того, является ли объект нулевым только потому, что вы не можете их вызвать null
.
Это выглядит немного странно, но ...
stringName == null || "".equals(stringName)
Никогда не было проблем с этим, к тому же это более безопасный способ проверки, избегая возможных исключений нулевой точки.
Я не уверен, что было не так с ответом MYYN.
if (yourString != null) {
//do fun stuff with yourString here
}
Вышеупомянутая нулевая проверка вполне приемлема.
Если вы пытаетесь проверить, совпадает ли ссылка String (без учета регистра) с другой строкой, которая, как вы знаете , не является пустой ссылкой, сделайте что-то вроде этого:
String x = "this is not a null reference"
if (x.equalsIgnoreCase(yourStringReferenceThatMightBeNull) ) {
//do fun stuff
}
Если есть какие-либо сомнения относительно того, есть ли у вас пустые ссылки для обеих сравниваемых строк, вам необходимо проверить наличие нулевой ссылки хотя бы на одной из них, чтобы избежать возможности исключения NullPointerException.
Если ваша строка имеет значение "null", вы можете использовать
if(null == stringName){
[code]
}
else
[Error Msg]
импортируйте это в свой класс
import org.apache.commons.lang.StringUtils;
затем используйте его, они оба вернут истину
System.out.println(StringUtils.isEmpty(""));
System.out.println(StringUtils.isEmpty(null));
Конечно, user351809 выдаст исключение stringname.equalsignorecase(null)
NullPointerException.
Видите ли, у вас есть строковый объект stringname
, который соответствует двум возможным условиям: -
stringname
имеет какое-то ненулевое строковое значение (скажем, "компьютер"): "computer".equalsignorecase(null)
false
.stringname
имеет null
значение: null.equalsignorecase(null)
true
, null
это не объект, который может выполнить equalsignorecase()
метод.Следовательно, вы получаете исключение из-за случая 2.
Я предлагаю вам просто использоватьstringname == null
Простой способ:
public static boolean isBlank(String value) {
return (value == null || value.equals("") || value.equals("null") || value.trim().equals(""));
}
Если value
возвращено значение null, используйте:
if(value.isEmpty());
Когда-нибудь, чтобы проверить null, if(value == null)
в java он может не дать true, даже если String имеет значение null.
if(value.isEmpty())
дает NullPointerException
. В этом случае лучше использоватьif(value == null)
С Java 7 вы можете использовать
if (Objects.equals(foo, null)) {
...
}
который вернется, true
если оба параметра null
.
Я понимаю, что на это был дан ответ давным-давно, но я не видел этого в публикации, поэтому решил поделиться тем, что делаю. Это не очень хорошо для читабельности кода, но если вам нужно выполнить серию нулевых проверок, мне нравится использовать:
String someString = someObject.getProperty() == null ? "" : someObject.getProperty().trim();
В этом примере для строки вызывается обрезка, которая выдаст NPE, если строка была нулем или пробелами, но в той же строке вы можете проверить на null или пробел, чтобы не получить тонну (больше ) трудно форматировать блоки if.
Если я правильно понимаю, это должно сработать:
if(!stringname.isEmpty())
// an if to check if stringname is not null
if(stringname.isEmpty())
// an if to check if stringname is null
Ну, в последний раз, когда кто-то задавал этот глупый вопрос, ответ был:
someString.equals("null")
Это «исправление» лишь скрывает большую проблему , как null
становится "null"
в первую очередь, хотя.
Есть два способа сделать это ... Скажите String == null или string.equals () ..
public class IfElse {
public int ifElseTesting(String a){
//return null;
return (a== null)? 0: a.length();
}
}
public class ShortCutifElseTesting {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
System.out.println("enter the string please:");
String a=scanner.nextLine();
/*
if (a.equals(null)){
System.out.println("you are not correct");
}
else if(a.equals("bangladesh")){
System.out.println("you are right");
}
else
System.out.println("succesful tested");
*/
IfElse ie=new IfElse();
int result=ie.ifElseTesting(a);
System.out.println(result);
}
}
Проверьте этот пример .. Вот еще один пример сокращенной версии If Else ..