Представление пустого символа в Java: методы и особенности

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

В Java невозможно создать примитивный тип char, который не представляет ни одного символа. Но у нас есть нулевой символ – \u0000:

Java
Скопировать код
char emptyChar = '\u0000'; // На самом деле, я тоже символ...

Для объекта Character, который принимает значение null, можно записать следующим образом:

Java
Скопировать код
Character emptyCharObject = null; // Вполне могу быть пустым! 🙃

Проверка отсутствия символа в строке выполняется так:

Java
Скопировать код
boolean isEmpty = (myChar == '\u0000'); // Есть ли что-нибудь?
Кинга Идем в IT: пошаговый план для смены профессии

ASCII-код 0: "Ничто" это всё-таки "Не-ничто"

В Java ASCII-код 0 обозначает отсутствие символа. Использование следующего образца:

Java
Скопировать код
char ch = '\u0000'; // Я – скрытый агент "Ничто"! 👤

означает применение нулевого ASCII-символа. Он подобен невидимке, выглядит как пробел, но на самом деле он существует!

Удаление символов из строк

Значение Character.MIN_VALUE не стоит отождествлять с пустой строкой. Для удаления символа:

  • StringBuilder идеально подходит для модификации строк, она поддерживает методы добавления и удаления символов.
  • Если это необходимо, работайте напрямую с массивами символов char.
  • Метод String.replace() только заменяет символы, но не удаляет их. Для удаления вам удобнее будет использовать StringBuilder.deleteCharAt().

char и Character: Близки по названию, но далеки по сути

char и Character существенно различаются: первый не может быть null, в отличие от второго:

Java
Скопировать код
Character objChar = new Character('\u0000'); // Character: "Могу быть null, также могу быть '\u0000'"
char primChar = '\u0000'; // char: "Нет null в моем списке значений, я всегда '\u0000', пусть и невидимый!"

Понимание автоупаковки поможет прояснить эти различия.

Нулевой символ как скрытый агент в массивах

В массиве символов char символ \u0000 может служить заполнителем, обеспечивая порядок:

Java
Скопировать код
char[] charArray = new char[10];
Arrays.fill(charArray, '\u0000'); // Задача выполнена, нулевой агент начал работу!

Этот символ может быть полезен в алгоритмах поиска или при определении начальных значений для переменных.

Визуализация

Класс Character в Java можно представить как ряд коробок на полке:

Markdown
Скопировать код
| A | B | C | ... | Пустая коробка |

Каждая коробка хранит определенную букву, но также есть и коробка, представляющая пустое значение\u0000.

Java
Скопировать код
Character myChar = '\u0000'; // И вот она, пустая коробка!

'\u0000' – это код для обозначения отсутствия символа:

Markdown
Скопировать код
До: [A, B, C, ..., ⬜️]
После: [A, B, C, ...] // Коробка ⬜️ теперь символизирует '\u0000', и это её место.

И всё же здесь есть парадокс: "пустой символ" в Character вы не увидите, так же как и содержимое пустой коробки!

Особенности и возможные трудности!

Строковые ловушки и способы их избежания

Будьте осторожны с '\u0000' в строках, так как методы replace могут внезапно интерпретировать его некорректно.

Подробнее об этом расскажет наш спикер на видео
skypro youtube speaker

Универсальное применение символа \u0000

Иногда \u0000 может быть использован там, где его наличие не предполагается, что может внести путаницу, особенно в строках, которые требуют завершения в стиле C.

Последовательность важна, но...

Не забывайте, что некоторые базы данных и форматы файлов могут игнорировать \u0000.

Практическая польза символа \u0000

Пустой или нет? Вот в чем вопрос!

Используйте сравнение с \u0000 для проверки, не является ли char "пустышкой", скрывающейся под символом:

Java
Скопировать код
if (inputChar == '\u0000') {
    // Вот так мы раскрываем «инкогнито»!
}

Армия нулевых символов

Используйте нулевые символы для инициализации массива char:

Java
Скопировать код
char[] chars = new char[5];
Arrays.fill(chars, '\u0000'); // И вот ваш личный детахмент нулевых агентов!

Это позволит избежать непредвиденных ситуаций.

Полезные материалы

  1. Character (Java SE 11 & JDK 11 )Официальная документация Java по классу Character.
  2. Primitive Data Types (The Java™ Tutorials)Основные знания по Java для начинающих.
  3. Autoboxing and Unboxing (The Java™ Tutorials) — Подробнее о автоупаковке в Java.
  4. Unicode – The World Standard for Text and Emoji — Полное руководство по представлению символов.
  5. java – How to convert a byte to its binary string representation – Stack OverflowРабота с битами и байтами в Java.
  6. Just a moment... — Уважаемое отношение к null!
Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей
Какой символ в Java используется для представления отсутствия символа?
1 / 5