reemplazar - quitar comillas de una cadena java
En Java, ¿hay alguna forma de escribir un literal de cadena sin tener que escapar de las comillas? (7)
La respuesta es no, y la prueba reside en la Especificación del lenguaje Java :
StringLiteral:
"StringCharacters"
StringCharacters:
StringCharacter
| StringCharacters StringCharacter
StringCharacter:
InputCharacter but not " or /
| EscapeSequence
Como puede ver, un StringLiteral
puede estar limitado por "
y no puede contener un carácter especial sin escapes ...
Una nota al margen: puedes insertar Groovy dentro de tu proyecto, esto ampliará la sintaxis de Java permitiéndote usar ''''''multi line string ''''''
, '' "string with single quotes" ''
y también "string with ${variable}"
.
Supongamos que tiene un literal String con muchas comillas dentro. Podrías escapar de todos ellos, pero es un dolor y es difícil de leer.
En algunos idiomas, puedes hacer esto:
foo = ''"Hello, World"'';
En Java, sin embargo, ''''
se utiliza para char
, por lo que no puede usarlo para String
esta manera. Algunos lenguajes tienen sintaxis para evitar esto. Por ejemplo, en python, puedes hacer esto:
"""A pretty "convenient" string"""
¿Java tiene algo similar?
Lo siguiente parece funcionar para mí:
String x = "Some Text" + ''"'' + "More Text" + ''"'' + "Even More Text";
Creo que porque char es el tipo de variable primitivo para String, Strings y chars se pueden combinar (al menos el compilador de eclipse no parece quejarse).
No, y siempre me ha molestado la falta de diferentes sintaxis de cadenas de caracteres en Java.
Aquí hay un truco que he usado de vez en cuando:
String myString = "using `backticks` instead of quotes".replace(''`'', ''"'');
Principalmente solo hago algo así para un campo estático. Como es estático, el código de reemplazo de cadena se llama una vez, luego de la inicialización de la clase. Por lo tanto, la penalización de rendimiento en tiempo de ejecución es prácticamente inexistente, y hace que el código sea considerablemente más legible.
Puede haber en una versión futura de Java (10 o más).
Ver JEPS 8196004 de enero de 2018: ( "JEP" es el "Programa de mejora de JDK" )
Proyecto de JEP: Literales sin formato
Agregue un nuevo tipo de literal, un literal de cadena sin formato, al lenguaje de programación Java.
Al igual que el literal de cadena tradicional, un literal de cadena sin formato produce una Cadena, pero no interpreta escapes de cadena y puede abarcar varias líneas de código fuente .
Entonces, en lugar de:
Runtime.getRuntime().exec("/"C://Program Files//foo/" bar");
String html = "<html>/n"
" <body>/n" +
" <p>Hello World.</p>/n" +
" </body>/n" +
"</html>/n";
System.out.println("this".matches("//w//w//w//w"));
Podrías escribir:
Runtime.getRuntime().exec(`"C:/Program Files/foo" bar"`);
String html = `<html>
<body>
<p>Hello World.</p>
</body>
</html>
`;
System.out.println("this".matches(`/w/w/w/w`));
¡Ordenado!
Pero sigue siendo solo un borrador : tendrá que publicarse, enviarse, ser candidato y financiado, antes de completarse y convertirse en el próximo JDK.
Respuesta simple: No.
Para cadenas más largas que deben ser escapadas, generalmente las leo de algún recurso externo.
Si quiere escapar ''
o "
en su cadena, puede usar el siguiente código:
String text = ...
text = text.replaceAll("(''|/")", "////$1");
también puedes usar StringEscapeUtils desde apache commons
ACTUALIZACIÓN : Si alguien está interesado en algunos ejemplos, aquí hay un enlace útil: http://java.dzone.com/articles/commons-lang-3-improved-and-powerful-StringEscapeUtils