En Java, il est un moyen d'écrire une chaîne de caractères littérale, sans avoir à échapper les guillemets?
dites que vous avez une chaîne littérale avec beaucoup de guillemets à l'intérieur. Vous pouvez échapper à tous, mais c'est une douleur, et difficile à lire.
Dans certaines langues, vous pouvez simplement faire ceci:
foo = '"Hello, World"';
en Java, cependant, ''
est utilisé pour char
s, donc vous ne pouvez pas l'utiliser pour String
s de cette façon. Certaines langues ont une syntaxe pour contourner cela. Par exemple, en python, vous pouvez faire ceci:
"""A pretty "convenient" string"""
est-ce que Java a quelque chose de similaire?
7 réponses
la réponse est non, et la preuve réside dans le Java Language Specification :
StringLiteral:
"StringCharacters"
StringCharacters:
StringCharacter
| StringCharacters StringCharacter
StringCharacter:
InputCharacter but not " or \
| EscapeSequence
comme vous pouvez le voir un StringLiteral
peut simplement être lié par "
et ne peut pas contenir de caractère spécial sans échappatoire..
une note latérale: vous pouvez intégrer Groovy dans votre projet, cela va étendre la syntaxe de Java vous permettant d'utiliser '''multi line string '''
, ' "string with single quotes" '
et aussi "string with ${variable}"
.
Non, et J'ai toujours été ennuyé par l'absence de syntaxes littérales en Java.
voici un truc que j'ai utilisé de temps en temps:
String myString = "using `backticks` instead of quotes".replace('`', '"');
Je ne fais principalement quelque chose comme ça que pour un champ statique. Puisqu'il est statique, le code string-replace est appelé une fois, lors de l'initialisation de la classe. Ainsi, la pénalité de performance runtime est pratiquement inexistante, ce qui rend le code beaucoup plus lisible.
vous pouvez aussi utiliser StringEscapeUtils from apache commons
UPDATE : si quelqu'un est intéressé par quelques exemples, voici un lien utile: http://java.dzone.com/articles/commons-lang-3-improved-and-powerful-StringEscapeUtils
il pourrait y avoir dans une version future de Java (10 ou plus).
voir JEPS 8196004 à partir de janvier 2018: ( " JEP "is the" JDK Enhancement Program " )
JEP projet: Les Littéraux de Chaîne
ajoute un nouveau type de littéral, une chaîne de caractères littérale brute, au langage de programmation Java.
Comme la corde traditionnelle littérale, une corde brute literal produit une chaîne, mais n'interprète pas les échappées de chaîne et peut s'étendre sur plusieurs lignes de code source .
donc au lieu 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"));
vous pourriez taper:
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`));
Neat!
mais il est toujours juste un projet : il devra être affiché, soumis, être un candidat, et financé, avant d'être terminé et de le faire dans le prochain JDK.
réponse Simple: non.
pour les cordes plus longues qui doivent être échappées, je les lis habituellement à partir d'une certaine ressource externe.
semble fonctionner pour moi:
String x = "Some Text" + '"' + "More Text" + '"' + "Even More Text";
je pense que parce que char est le type de variable primitive pour la chaîne, les chaînes et les caractères peuvent être combinés (au moins le compilateur eclipse ne semble pas se plaindre).
si vous voulez échapper à '
ou "
dans votre chaîne de caractères, vous pouvez utiliser le code suivant:
String text = ...
text = text.replaceAll("('|\")", "\\");