tl; dr
Чтобы удалить любые символы NULL
с нулевым кодом Unicode, вызовите String::replace
при передаче односимвольного CharSequence
с помощью escape-последовательности \u…
с шестнадцатеричным числом, равным нулю (\u0000
).
input.replace( "\u0000" , "" )
Подробности
A String
в Java не может содержать текст и нулей, только один. Итак, я предполагаю, что вы использовали термин null
не означал ссылку на нулевой объект в Java.
NULL
символ в Unicode и ASCII
Вы должны иметь в виду спросить об удалении Unicode кодовой точки 0, известной как NULL
. (Также определяется в ASCII .) Если мое предположение верно, я предлагаю вам отредактировать свой вопрос для ясности, чтобы избежать голосов против.
Для этого нам нужно представить управляющий символ . Загвоздка в том, что управляющий символ по определению не может появляться в тексте. Поэтому мы используем escape-последовательность в Java для идентификации символа по шестнадцатеричному числу. Escape начинается с backsla sh и u
.
Обратите внимание, что мы выполняем поиск и замену для указанного c фрагмента текста (односимвольного CharSequence
). Поэтому мы должны вызвать String::replace
, а не String::replaceAll
, который принимает аргумент регулярного выражения. Хотя replaceAll
технически работает, использование этого метода не отражает наши намерения здесь и является неприемлемым.
String input = … ;
String modified = input.replace( "\u0000" , "" ) ;
Пример использования.
String input = "\u0000Dog\u0000Cat\u0000" ;
int lengthBefore = input.length();
String modified = input.replace( "\u0000" , "" ) ;
int lengthAfter = modified.length();
System.out.println( "lengthBefore = " + lengthBefore );
System.out.println( "lengthAfter = " + lengthAfter );
См. Этот код , запускаемый в IdeOne.com .
lengthBefore = 9
lengthAfter = 6
Другие направления
String::trim
Метод String::trim
удаляет начальные и конечные пробельные символы . Его определение пробела включает символ NULL
. Обратите внимание, что мы не удаляем NULL в середине этого примера, только NULL спереди и NULL сзади. Таким образом, длина равна 7, 9-2.
"\u0000Dog\u0000Cat\u0000"
.trim()
.length()
7
Если ваша строка состоит только из символа NULL
, результатом будет пустая строка .
"\u0000"
.trim()
.length()
0
L oop кодовых точек
Вы можете l oop каждую кодовую точку в вашем тексте. Получите IntStream
(поток int
примитивов ) representing each character's code point. Test if the code point is zero (a
NULL` символа).
"\u0000Dog\u0000Cat\u0000"
.codePoints()
.forEach(
( int codePoint ) -> System.out.println( 0 == codePoint )
)
true
false
false
false
true
false
false
false
true