Как я могу проверить строку против null в java? Я использую
stringname.equalsignorecase(null)
но он не работает.
Как я могу проверить строку против null в java? Я использую
stringname.equalsignorecase(null)
но он не работает.
string == null
сравнивается, если объект имеет значение 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.
}
Типичный способ защитить себя от null при работе со строками:
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 - который обеспечивает нулевые операции String.
if (StringUtils.equals(foo, bar)) {
// Do something here.
}
Другой ответ был шуток и сказал, что вы должны это сделать:
boolean isNull = false;
try {
stringname.equalsIgnoreCase(null);
} catch (NullPointerException npe) {
isNull = true;
}
Пожалуйста, не делай этого. Вы должны делать исключения только для исключительных ошибок; если вы ожидаете нулевое значение, вы должны проверить его заранее, и не позволяйте этому генерировать исключение.
В моей голове есть две причины. Во-первых, исключения медленны; проверка на null выполняется быстро, но когда JVM генерирует исключение, требуется много времени. Во-вторых, код намного легче читать и поддерживать, если вы просто проверяете нулевой указатель раньше времени.
s == null
не будет работать?
Конечно, это работает. Вам не хватает важной части кода. Вам просто нужно сделать так:
boolean isNull = false;
try {
stringname.equalsIgnoreCase(null);
} catch (NullPointerException npe) {
isNull = true;
}
;)
Использовать метод TextUtils.
TextUtils.isEmpty(str): возвращает значение true, если строка имеет значение null или 0. Параметры: 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 вызывается на null String
, но
String nullString = null;
nullString.equalsIgnoreCase(null);
безусловно, приведет к исключению NullPointerException.
Методы so 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]
Вы можете проверить с помощью String == null
Это работает для меня
String foo = null;
if(foo == null){
System.out.println("String is 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.
Я понимаю, что это было ответино давно, но я не видел, чтобы это было опубликовано, поэтому я подумал, что поделюсь тем, что делаю. Это не особенно хорошо подходит для чтения кода, но если вам нужно выполнить ряд нулевых проверок, мне нравится использовать:
String someString = someObject.getProperty() == null ? "" : someObject.getProperty().trim();
В этом примере вызывается обрезка в строке, которая будет вызывать NPE, если строка была нулевой или пробельной, но в той же строке вы можете проверить нулевое или пустое значение, так что вы не получите тонну из (более) трудно форматировать, если блоки.
импортировать его в свой класс
import org.apache.commons.lang.StringUtils;
то используйте его, оба они вернут true
System.out.println(StringUtils.isEmpty(""));
System.out.println(StringUtils.isEmpty(null));
Ну, в последний раз, когда кто-то спросил этот глупый вопрос, ответ был:
someString.equals("null")
Это "исправление" только скрывает большую проблему того, как null
становится "null"
, в первую очередь.
Есть два способа сделать это:.Say 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 If Else..