Просматривая массив для пустой строки - PullRequest
0 голосов
/ 17 октября 2010

Массив Strings, names, был объявлен и инициализирован. Напишите операторы, необходимые для определения, является ли какой-либо из элементов массива нулевым, или ссылаются на пустую строку. Установите для переменной hasEmpty значение true, если какие-либо элементы имеют нулевое или пустое значение, в противном случае установите значение false

   hasEmpty=false;
   for (int i=0;i<names.length;i++)
   if (names[i].trim().equals("") || names[i]==null)
   hasEmpty=true;

Что не так с моим кодом?

Ответы [ 4 ]

2 голосов
/ 17 октября 2010

Вызов trim() первым приведет к исключению NullPointerException, если элемент массива будет null. В обратном порядке: условия короткого замыкания || гарантируют, что trim вызывается только для реального объекта String.

0 голосов
/ 14 июня 2011

Выдает исключение нулевого указателя, потому что вы пытаетесь запустить метод для нулевого объекта:

if (names[i].trim().equals("") || names[i]==null)

Итак, всякий раз, когда names [] имеет ОДНО имя, которое является нулевым, оно выдаст исключение. Одним из способов решения этой проблемы является переключение логических операторов в этом операторе if:

if (names[i]==null || names[i].trim().equals(""))
0 голосов
/ 17 октября 2010

Вы можете использовать isBlank () для Apache Commons Lang, чтобы проверить строку:

if (StringUtils.isBlank(names[i]) {
    ...
}

StringUtils.isBlank проверяет, является ли строка null или пустой (то есть, еслиравняется "" при удалении всех пустых символов).

0 голосов
/ 17 октября 2010

Рассмотрим names[i].trim().

Когда names[i] является строкой, у вас действительно есть что-то вроде someString.trim(), которое отлично работает.

Когда names[i] равно нулю, у вас действительно есть что-то вроде null.trim(). Вы уже обнаружили, что null не допускает метод trim (). (На самом деле, я даже не совсем уверен, что такое «ноль».)

Следовательно, вы должны проверить на ноль, прежде чем вызывать trim ().

Если у вас есть a && b, где a и b - выражения, проверки выполняются слева направо и анализатор останавливается, как только проблема решена. Таким образом, для логического и оператора (&&), если a равно false, b никогда не проверяется. Это то, что позволяет

if (a != null && a.trim().length() > 0) { ... }

на работу. если a равно нулю, часть a.trim () не выполняется, поскольку она была бы бессмысленной с логической точки зрения; значение условного было решено.

Аналогично для

if (a == null || a.trim().length() == 0) { ... }

если a равно нулю, то часть a.trim () никогда не выполняется, и мы не получаем ошибку.

...