full code java string replace nul

java - code - char-48



¿Reemplazar la cadena Java y el carácter NUL(NULL, ASCII 0)? (5)

¿Reemplazar un personaje en una Cadena con un carácter nulo incluso funciona en Java? Sé que ''/ 0'' terminará una cadena de caracteres.

Eso depende de cómo defines lo que está funcionando. ¿Reemplaza todas las ocurrencias del personaje objetivo con ''/0'' ? ¡Absolutamente!

String s = "food".replace(''o'', ''/0''); System.out.println(s.indexOf(''/0'')); // "1" System.out.println(s.indexOf(''d'')); // "3" System.out.println(s.length()); // "4" System.out.println(s.hashCode() == ''f''*31*31*31 + ''d''); // "true"

¡Todo parece funcionar bien para mí! indexOf puede encontrarlo, cuenta como parte de la longitud y su valor para el cálculo del código hash es 0; todo es como lo especifica el JLS / API.

NO FUNCIONA si espera reemplazar un personaje con el carácter nulo de alguna manera eliminar ese carácter de la cadena. Por supuesto que no funciona así. ¡Un personaje nulo sigue siendo un personaje!

String s = Character.toString(''/0''); System.out.println(s.length()); // "1" assert s.charAt(0) == 0;

Tampoco funciona si espera que el carácter nulo termine una cadena. Es evidente a partir de los fragmentos de arriba, pero también está claramente especificado en JLS ( 10.9. Una matriz de caracteres no es una cadena ):

En el lenguaje de programación Java, a diferencia de C, una matriz de caracteres no es una String , y ni una String ni una matriz de caracteres termina con ''/ u0000'' (el carácter NUL).

¿Sería este el culpable de los personajes funky?

Ahora estamos hablando de una cosa completamente diferente, es decir, cómo se reproduce la secuencia en la pantalla. La verdad es que, incluso "¡Hola mundo!" se verá funky si usa la fuente dingbats. Una cadena Unicode puede parecer funky en una configuración regional pero no en la otra. Incluso una cadena unicode debidamente procesada que contenga, por ejemplo, caracteres chinos, puede parecer funky para alguien de, por ejemplo, Groenlandia.

Dicho esto, el personaje nulo probablemente se verá funky independientemente; por lo general, no es un personaje que desea mostrar. Dicho esto, dado que el carácter nulo no es el terminador de cadena, Java es más que capaz de manejarlo de una forma u otra.

Ahora, para abordar lo que suponemos que es el efecto deseado, es decir, eliminar todo el período de una cadena, la solución más simple es usar la sobrecarga de replace(CharSequence, CharSequence) .

System.out.println("A.E.I.O.U".replace(".", "")); // AEIOU

Aquí también se menciona la solución replaceAll , pero funciona con expresión regular, por lo que debe escapar del carácter meta punto, y es probable que sea más lenta.

Al probar el código de otra persona, noté algunas páginas JSP que imprimían caracteres funky que no eran ASCII. Tomando un chapuzón en la fuente encontré este bocado:

// remove any periods from first name e.g. Mr. John --> Mr John firstName = firstName.trim().replace(''.'',''/0'');

¿Reemplazar un personaje en una Cadena con un carácter nulo incluso funciona en Java? Sé que ''/0'' terminará una C-cadena. ¿Sería este el culpable de los personajes funky?


¿Reemplazar un personaje en una Cadena con un carácter nulo incluso funciona en Java?

No.

¿Sería este el culpable de los personajes funky?

Muy probable.


Creo que debería ser el caso. Para borrar el carácter, debe usar replace(".", "") lugar.


Debería ser cambiado probablemente a

firstName = firstName.trim().replaceAll("//.", "");


Esto causa "caracteres funky":

System.out.println( "Mr. Foo".trim().replace(''.'',''/0''));

produce:

Mr[] Foo

en mi consola Eclipse, donde [] se muestra como un cuadro cuadrado. Como otros han publicado, use String.replace() .