Я хочу выполнить какое-то действие ТОЛЬКО ЕСЛИ моя строка имеет значимое значение. Итак, я попробовал это.
if (!myString.equals("")) {
doSomething
}
и это
if (!myString.equals(null)) {
doSomething
}
и это
if ( (!myString.equals("")) && (!myString.equals(null))) {
doSomething
}
и это
if ( (!myString.equals("")) && (myString!=null)) {
doSomething
}
и это
if ( myString.length()>0) {
doSomething
}
И во всех случаях моя программа, doSomething
несмотря на то, что моя строка пуста. Это равно null
. Итак, что не так с этим?
ДОБАВЛЕНО:
Я нашел причину проблемы. Переменная была объявлена как строка и, как следствие, null
присвоена этой переменной была преобразована в "null"
! Итак, if (!myString.equals("null"))
работает.
null
нет никаких методов, так что нетequals()
. Если бы выmyString
былиnull
, как бы вы вызвали метод для этого? :)System.out.println(myString)
непосредственно перед блоком if, чтобы вы могли увидеть, что там?null
"?null
присвоение этой переменной было преобразовано в"null"
- это ужасная идея. Попробуйте изменить этот дизайн, если это вообще возможно.Ответы:
В качестве дальнейшего комментария, вы должны знать этот термин в
equals
договоре:От
Object.equals(Object)
:Способ для сравнения с
null
использованиемx == null
иx != null
.Более того
x.field
иx.method()
кидаетNullPointerException
еслиx == null
.источник
s.isEmpty()
вместоs.length() == 0
читабельности. Любая разница в производительности незначительна. Я согласен, чтоs.equals("")
это ужасно.Если
myString
естьnull
, то вызовmyString.equals(null)
илиmyString.equals("")
не удастся сNullPointerException
. Вы не можете вызывать какие-либо методы экземпляра для пустой переменной.Сначала проверьте на null вот так:
Это использует оценку короткого замыкания, чтобы не пытаться выполнить проверку
.equals
ifmyString
null.источник
.isEmpty()
вместо.equals("")
.myString.isEmpty()
. Но на этом уровне удобочитаемость важнее оптимизации, и люди могут более привыкнуть к чтениюmyString.equals("")
. (Или, возможно, нет.)Apache Commons
StringUtils.isNotEmpty
- лучший способ.источник
Если myString на самом деле имеет значение null, то любой вызов ссылки завершится с исключением Null Pointer Exception (NPE). Начиная с Java 6, используйте #isEmpty вместо проверки длины (в любом случае НИКОГДА не создавайте новую пустую строку с проверкой).
Между прочим, если сравнивать со строковыми литералами, как вы это сделаете, произойдет обратное утверждение, чтобы не иметь нулевой проверки, т. Е.
вместо того :
источник
РАБОТАЕТ !!!!
источник
Вы должны проверить, что
myString
объектnull
:источник
Если ваша строка пуста, вызовы, подобные этому, должны генерировать исключение NullReferenceException:
myString.equals (нуль)
Но в любом случае, я думаю, что такой метод, как вы хотите:
Затем в своем коде вы можете делать такие вещи:
источник
Я бы рекомендовал использовать существующую утилиту или создать свой собственный метод:
Тогда просто используйте его, когда вам это нужно:
Как отмечено выше, || и && операторы короткого замыкания. Это означает, что как только они могут определить свою ценность, они останавливаются. Поэтому, если (string == null) имеет значение true, часть длины не нужно оценивать, поскольку выражение всегда будет истинным. Аналогично с &&, где, если левая сторона ложна, выражение всегда ложно и не нуждается в дальнейшей оценке.
Как дополнительное примечание, использование длины обычно лучше, чем использование .equals. Производительность немного лучше (не очень) и не требует создания объектов (хотя большинство компиляторов могут оптимизировать это).
источник
Пытаться,
источник
Кстати, если вы делаете много манипуляций со строками, есть отличный класс Spring со всеми видами полезных методов:
http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/util/StringUtils.html
источник
Каждый раз, когда мне приходится иметь дело со строками (почти каждый раз), я останавливаюсь и задаюсь вопросом, какой способ действительно является самым быстрым способом проверить наличие пустой строки. Конечно, проверка string.Length == 0 должна быть самой быстрой, поскольку Length является свойством, и не должно быть никакой обработки, кроме получения значения свойства. Но потом я спрашиваю себя, почему там String.Empty? Я должен сказать, что проверка на String.Empty должна быть быстрее, чем на длину. Ну, я решил проверить это. Я написал небольшое приложение для консоли Windows, которое сообщает мне, сколько времени потребуется, чтобы выполнить определенную проверку на 10 миллионов повторений. Я проверил 3 разных строки: пустую строку, пустую строку и строку "". Я использовал 5 разных методов: String.IsNullOrEmpty (), str == null, str == null || str == String.Empty, str == null || str == "", str == null || ул.
Согласно этим результатам, проверка в среднем
str == null
является самой быстрой, но не всегда дает то, что мы ищем.if str = String.Empty
илиstr = ""
это приводит к ложному. Тогда у вас есть 2, которые связаны на втором месте:String.IsNullOrEmpty()
иstr == null || str.length == 0
. Так какString.IsNullOrEmpty()
выглядит лучше и легче (и быстрее) писать, я бы рекомендовал использовать его поверх другого решения.источник
Я бы сделал что-то вроде этого:
источник
Я использую
StringUtil.isBlank(string)
Он проверяет, является ли строка пустой: null, emtpy или только пробел.
Так что этот пока лучший
Вот оригинальный метод из документов
источник
Это должно работать:
Если нет, то, вероятно, myString имеет значение, которое вы не ожидаете. Попробуйте напечатать это так:
Использование символов «+» для окружения строки покажет вам, есть ли там лишние пробелы, которые вы не учитываете.
источник
if(str.isEmpty() || str==null){ do whatever you want }
источник
Хорошо, вот как типы данных работают в Java. (Вы должны извинить мой английский, я, вероятно, не использую правильный словарь. Вы должны различать два из них. Базовые типы данных и обычные типы данных. Базовые типы данных в значительной степени составляют все, что существует. Например, есть все числа, символы, логические значения и т. д. Обычные типы данных или сложные типы данных - это все остальное. Строка - это массив символов, поэтому сложный тип данных.
Каждая переменная, которую вы создаете, на самом деле является указателем на значение в вашей памяти. Например:
переменная "s" НЕ содержит строку. Это указатель. Этот указатель указывает на переменную в вашей памяти. При вызове
System.out.println(anyObject)
, тоtoString()
метод этого объекта называется. Если он не переопределилtoString
объект, он напечатает указатель. Например:Все, что стоит за «@» - это указатель. Это работает только для сложных типов данных. Примитивные типы данных ПРЯМО сохраняются в своем указателе. Так что на самом деле указатель отсутствует, а значения сохраняются напрямую.
Например:
Я не храню указатель в этом случае. я буду хранить целочисленное значение 123 (в байтах ofc).
Итак, давайте вернемся к
==
оператору. Он всегда сравнивает указатель, а не содержимое, сохраненное в позиции указателя в памяти.Пример:
Эта строка имеет разные указатели. String.equals (String other) однако сравнивает содержимое. Вы можете сравнивать примитивные типы данных с оператором '==', поскольку указатель двух разных объектов с одинаковым содержимым одинаков.
Ноль будет означать, что указатель пуст. Пустой примитивный тип данных по умолчанию равен 0 (для чисел). Null для любого сложного объекта, однако, означает, что этот объект не существует.
Приветствую
источник
Для меня лучшая проверка, если строка имеет какое-либо значимое содержимое в Java, это:
Прежде всего , проверьте , является ли строка ,
null
чтобы избежать ,NullPointerException
и тогда вы зачистите все символы пробела , чтобы избежать проверок строк , которые имеют только пробельные и , наконец , проверить , если обрезанная строка не пуста, то есть имеет длину 0.источник
У меня была эта проблема в Android, и я использую этот способ (работа для меня):
Но в коде Java я использую:
И :
источник
Я предпочитаю использовать:
Прочитайте StringUtils.isBlank () против String.isEmpty () .
источник
В Android вы можете проверить это с помощью метода полезности
isEmpty
отTextUtils
,isEmpty(CharSequence str)
Метод проверки как состояния, такnull
и длины.источник
Я всегда использую так:
или вы можете скопировать это в ваш проект:
и просто назовите это как:
он вернет истину, если он пуст или равен нулю.
b=true
если пусто или нольили вы можете использовать try catch и catch, когда оно пустое.
источник
Я думаю, что myString - это не строка, а массив строк. Вот что вам нужно сделать:
источник
Вы можете проверить строку, равную нулю, используя это:
Если результат равен 0, то (Test + "") = "null".
источник
Я попробовал большинство примеров, приведенных выше, для нулевого значения в приложении для Android, которое я собирал, и ЭТО ВСЕ ОШИБЛО. Поэтому я нашел решение, которое работало в любое время для меня.
Так что просто конкатенируйте пустую строку, как я делал выше, и протестируйте на «null», и она отлично работает. На самом деле не исключение не выбрасывается
источник
Исключение также может помочь:
источник
Если вы работаете в Android, вы можете использовать простой класс TextUtils. Проверьте следующий код:
Это простое использование кода. Ответ может быть повторен. Но просто иметь один и тот же чек для вас.
источник
Вы должны проверить с нуля
if(str != null).
источник