Як я можу перевірити рядок проти нуля в 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 є нульовим, тому він не знає, що таке .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 був нульовим, він не оцінює другу половину умовного, і все в порядку.
Найпростіший спосіб, якщо ви використовуєте літерал String (замість змінної):
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, якщо рядок є нульовим або довжиною 0. Параметри: str рядок для перевірки Повертає: true, якщо str має нульову або нульову довжину
if(TextUtils.isEmpty(str)) {
// str is null or lenght is 0
}
Нижче наведено вихідний код цього методу. Ви можете використовувати direclty.
/**
* 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.
Тож рівні методи не призначені для перевірки, чи є об’єкт нульовим, лише тому, що ви не можете викликати їх null
.
Це виглядає трохи дивним, але ...
stringName == null || "".equals(stringName)
Ніколи не виникало жодних проблем із цим способом, плюс це більш безпечний спосіб перевірки, уникаючи потенційних винятків з нульовими крапками.
Я не впевнений, що було неправильно у відповіді The MYYN.
if (yourString != null) {
//do fun stuff with yourString here
}
Вищезазначена нульова перевірка цілком вірна.
Якщо ви намагаєтеся перевірити, чи посилання на рядок дорівнює (ігноруючи регістр) іншому рядку, який, як ви знаєте , не є нульовим посиланням, зробіть щось подібне:
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
, який виконує 2 можливі умови: -
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
повернене значення є нульовим, використовуйте:
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();
У цьому прикладі на рядок викликається trim, який видасть NPE, якщо рядок нульовий або пробіли, але в цьому ж рядку ви можете перевірити нульовий або порожній, щоб у вас не вийшло тонни (більше ) важко форматувати, якщо блоки.
Якщо я правильно розумію, це слід зробити:
if(!stringname.isEmpty())
// an if to check if stringname is not null
if(stringname.isEmpy())
// 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 ..