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?

97
demandé sur Matthew 2010-06-14 02:45:53

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

65
répondu Jack 2017-10-04 07:30:15

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.

118
répondu benjismith 2010-06-13 22:53:42

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

6
répondu Doua Beri 2013-06-23 08:08:41

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.

5
répondu VonC 2018-01-27 23:23:40

réponse Simple: non.

pour les cordes plus longues qui doivent être échappées, je les lis habituellement à partir d'une certaine ressource externe.

4
répondu Chris Lercher 2010-06-13 22:49:55

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

-2
répondu Anonymous Person 2014-07-24 07:06:11

si vous voulez échapper à ' ou " dans votre chaîne de caractères, vous pouvez utiliser le code suivant:

String text = ...

text = text.replaceAll("('|\")", "\\");
-3
répondu SreejithVS 2014-07-24 07:05:21