Supposons que vous avez un littéral String avec beaucoup de guillemets à l'intérieur. Vous pourriez y échapper, mais c'est pénible et difficile à lire.
Dans certaines langues, vous pouvez simplement faire ceci:
foo = '"Hello, World"';
En Java, cependant, ''
est utilisé pour char
s, vous ne pouvez donc pas l'utiliser pour String
s de cette façon. Certaines langues ont une syntaxe pour contourner ce problème. Par exemple, en python, vous pouvez faire ceci:
"""A pretty "convenient" string"""
Est-ce que Java a quelque chose de similaire?
La réponse est non, et la preuve réside dans la spécification du langage Java :
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 échappées.
Une note de côté: vous pouvez intégrer Groovy à l'intérieur de votre projet, cela étendra 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 différentes syntaxes littérales de chaîne en Java.
Voici un truc que j'ai utilisé de temps en temps:
String myString = "using `backticks` instead of quotes".replace('`', '"');
Je fais principalement quelque chose comme ça pour un champ statique. Comme il est statique, le code de remplacement de chaîne est appelé une fois, lors de l'initialisation de la classe. La pénalité de performance d'exécution est pratiquement inexistante et rend le code considérablement plus lisible.
Mise à jour en décembre 2018 (12 mois plus tard):
Les littéraux de chaîne bruts (qui figurent sur la liste liste orange ) ne parviendront pas à JDK 12.
Voir le critiques ici .
Il pourrait y avoir dans une future version de Java (10 ou plus)).
Voir JEPS 8196004 à partir de janvier 2018: ( "JEP" est le "programme d'amélioration du JDK" )
Projet PEC: littéraux de chaîne bruts
Ajoutez un nouveau type de littéral, un littéral de chaîne brute, au langage de programmation Java.
Comme le littéral de chaîne traditionnel, un littéral de chaîne brute produit une chaîne, mais n'interprète pas les échappements 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 seriez capable de 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`));
Soigné!
Mais il est toujours juste un brouillon : il devra être posté, soumis, être candidat et financé avant d’être complété et d’être intégré dans le prochain JDK.
vous pouvez également utiliser StringEscapeUtils de Apache commons
[~ # ~] update [~ # ~] : Si quelqu'un est intéressé par certains exemples, voici un lien utile: http://Java.dzone.com/articles/commons-lang-3-improved-and-powerful-StringEscapeUtils
Réponse simple: non.
Pour les chaînes plus longues à échapper, je les lis généralement à partir d'une ressource externe.