Преобразование null в "" - PullRequest
0 голосов
/ 16 июня 2020

Как я могу заменить нулевые значения в строке регулярным выражением на ""? Есть ли способ разрешить строке игнорировать null или превратить ее в ""?

    for (Row row : sheet) {

        cprCell = row.getCell(2);   //Kolonne med C

        String textValueForCPR = String.valueOf(cprCell);
        String convertNull = textValueForCPR.replaceAll((null), "");

        System.out.println(convertNull);

        }

Ответы [ 2 ]

2 голосов
/ 17 июня 2020

Вероятно, вы ищете

String convertNull = textValueForCPR.replace("null", "");
1 голос
/ 16 июня 2020

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
...