Обработка строки «null» как объекта в Java

#java #string #object #null

#java #строка #объект #null

Вопрос:

У меня есть твиты, хранящиеся в базе данных MongoDB, и я извлекаю их для проведения некоторого анализа.

В этом случае я просматриваю хэштеги, связанные с твитом, и использую следующий код:

 BasicDBList hts = (BasicDBList)obj.get(Constants.HASHTAGS_STR);
if (!hts.isEmpty())
    tb.setHashtags(hts.toArray(new String[0]));
  

Это работает отлично… пока я не наткнулся на твит, в котором в качестве хэштега использовалось слово «null».

В этом случае hts-массив будет:

 [  null ]
  

Хэштеги хранятся во внутреннем наборе дерева, и вставка завершается ошибкой при сравнении. Я не хочу отбрасывать этот хэштег, сравнивая его с null — есть ли лучший обходной путь?

Строковый литерал «null» хранится в базе данных. Проблема возникает, когда BasicDBList считывает ее как объект, и этот объект преобразуется в строку. Строка становится нулевой строкой вместо строки «null». Я хочу понять, как правильно интерпретировать данные, чтобы

 tb.setHashtags() 
  

приводит к тому, что tb имеет связанный с ним хэштег «null» вместо выдаваемой ошибки.

Комментарии:

1. Ухх, "null" (строка) не является null значением. Строка из 4 букв будет работать просто отлично equals .

2. В строке нет ничего особенного "null" , просто сравните ее, как и любую другую строку.

3. Кроме того, new String[0] это пустой массив, а не null.

4. @shmosel К чему ты клонишь? Эллиот совершенно прав. Коллекции. toArray() этого не меняет.

5. @EJP Эллиот, похоже, говорит, что массив не может не содержать null элемент, если он пуст. Я хотел сказать, что передача пустого массива не обязательно означает, что вы получите пустой массив.

Ответ №1:

Проверьте, содержит ли список (BasicDBList) hts нулевые значения.

Метод toArray наследуется от ArrayList, который может возвращать массив, содержащий нулевые значения.

Взгляните на http://docs.oracle.com/javase/1.5.0/docs/api/java/util/ArrayList.html#toArray (T[])

Комментарии:

1. Я включил содержимое BasicDBList выше. В тех случаях, когда список фактически содержит null, он отображается как [], а не [null]

2. вы используете экземпляр класса BasicDBList, который наследует метод toArray от ArrayList . В этом методе будет создан массив того же типа, что и отправленный параметр [here new String[0]], и его размер может варьироваться в зависимости от элементов списка. Количество элементов списка может не совпадать с длиной массива, поэтому оставшиеся индексы должны иметь значение null. Вам не нужно беспокоиться о строковом литерале «null», очевидно, что это строка.

3. для вашего понимания просто попробуйте проверить длину списка ‘hts’ и длину массива, возвращаемого ‘hts. toArray(новая строка [0])’

4. Я ценю объяснение, но вы упускаете мою мысль. Проблема в том, что фактическим значением в базе данных является строка «null». BasicDBList считывает объект. При преобразовании в строку он интерпретирует ее как нулевое значение вместо строкового литерала.