En Java, existe-t-il un moyen d’écrire un littéral de chaîne sans avoir à échapper aux guillemets?

Disons que vous avez un littéral Ssortingng avec beaucoup de guillemets. Vous pouvez tous les échapper, mais c’est difficile et difficile à lire.

Dans certaines langues, vous pouvez simplement faire ceci:

foo = '"Hello, World"'; 

En Java, cependant, '' est utilisé pour les caractères s, donc vous ne pouvez pas l’utiliser pour Ssortingng s de cette façon. Certains langages ont une syntaxe pour contourner ce problème. Par exemple, en python, vous pouvez le faire:

 """A pretty "convenient" ssortingng""" 

Java a-t-il quelque chose de similaire?

La réponse est non et la preuve réside dans la spécification du langage Java :

  SsortingngLiteral: "SsortingngCharacters" SsortingngCharacters: SsortingngCharacter | SsortingngCharacters SsortingngCharacter SsortingngCharacter: InputCharacter but not " or \ | EscapeSequence 

Comme vous pouvez le voir, SsortingngLiteral peut simplement être lié par " et ne peut pas contenir de caractère spécial sans échappements ..

Une remarque: vous pouvez intégrer Groovy dans votre projet, cela étendra la syntaxe de Java, ce qui vous permettra d’utiliser '''multi line ssortingng ''' , ' "ssortingng with single quotes" ' et les "ssortingng with ${variable}" .

Non, et j’ai toujours été contrarié par le manque de syntaxe littérale en Java.

Voici un truc que j’ai utilisé de temps en temps:

 Ssortingng mySsortingng = "using `backticks` instead of quotes".replace('`', '"'); 

Je ne fais principalement que 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é d’exécution est donc pratiquement inexistante et rend le code beaucoup plus lisible.

vous pouvez également utiliser SsortingngEscapeUtils à partir de apache commons

MISE À JOUR : Si quelqu’un est intéressé par certains exemples, voici un lien utile: http://java.dzone.com/articles/commons-lang-3-improved-and-powerful-SsortingngEscapeUtils

Réponse simple: non

Pour les chaînes plus longues qui doivent être échappées, je les lis généralement à partir d’une ressource externe.

Il pourrait y avoir dans une future version de Java (10 ou plus).

Voir JEPS 8196004 de janvier 2018: ( “JEP” est le “JDK Enhancement Program” )

Projet JEP: littéraux de chaînes brutes

Ajoutez un nouveau type de littéral, un littéral de chaîne brut, 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 couvrir plusieurs lignes de code source .

Donc au lieu de:

 Runtime.getRuntime().exec("\"C:\\Program Files\\foo\" bar"); Ssortingng html = "\n" " \n" + " 

Hello World.

\n" + " \n" + "\n"; System.out.println("this".matches("\\w\\w\\w\\w"));

Vous seriez capable de taper:

 Runtime.getRuntime().exec(`"C:\Program Files\foo" bar"`); Ssortingng html = `  

Hello World.

`; System.out.println("this".matches(`\w\w\w\w`));

Soigné!

Mais il ne s’agit encore que d’un brouillon : il devra être publié, soumis, candidat et financé avant d’être complété et d’être intégré au prochain JDK.

Ce qui suit semble fonctionner pour moi:

 Ssortingng x = "Some Text" + '"' + "More Text" + '"' + "Even More Text"; 

Je pense que parce que char est le type de variable primitif pour Ssortingng, 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, vous pouvez utiliser le code suivant:

 Ssortingng text = ... text = text.replaceAll("('|\")", "\\\\$1");