Gibt es in Java eine Möglichkeit, ein Zeichenfolgenliteral zu schreiben, ohne Anführungszeichen zu umgehen?

Angenommen, Sie haben ein String-Literal mit vielen Anführungszeichen. Du könntest ihnen allen entkommen, aber es ist ein Schmerz und schwer zu lesen.

In einigen Sprachen können Sie dies einfach tun:

foo = '"Hello, World"'; 

In Java wird '' jedoch für char , so dass Sie es nicht auf diese Weise für String können. Einige Sprachen haben Syntax um dies zu umgehen. Zum Beispiel in Python können Sie dies tun:

 """A pretty "convenient" string""" 

Hat Java etwas Ähnliches?

Solutions Collecting From Web of "Gibt es in Java eine Möglichkeit, ein Zeichenfolgenliteral zu schreiben, ohne Anführungszeichen zu umgehen?"

Die Antwort lautet nein und der Beweis befindet sich in der Java-Sprachspezifikation :

  StringLiteral: "StringCharacters" StringCharacters: StringCharacter | StringCharacters StringCharacter StringCharacter: InputCharacter but not " or \ | EscapeSequence 

Wie Sie sehen können, kann ein StringLiteral einfach an " gebunden " und darf kein Sonderzeichen ohne Escapes enthalten.

Eine Randnotiz: Sie können Groovy in Ihr Projekt einbetten, dies wird die Syntax von Java erweitern und Ihnen die Verwendung von '''multi line string ''' ' "string with single quotes" ' und "string with ${variable}" .

Nein, und ich war schon immer verärgert über das Fehlen verschiedener String-Literal-Syntaxen in Java.

Hier ist ein Trick, den ich von Zeit zu Zeit benutzt habe:

 String myString = "using `backticks` instead of quotes".replace('`', '"'); 

Ich mache hauptsächlich nur so etwas für ein statisches Feld. Da es sich um einen statischen Code handelt, wird der String-Replace-Code bei der Initialisierung der class einmal aufgerufen. Daher ist die Laufzeitleistungseinbuße praktisch nicht existent und macht den Code wesentlich lesbarer.

Sie können auch StringEscapeUtils aus Apache-Commons verwenden

UPDATE : Wenn jemand an einigen Beispielen interessiert ist, ist hier ein nützlicher Link: http://java.dzone.com/articles/common-lang-3-improved-and-powerful-StringEscapeUtils

Einfache Antwort: Nein.

Für längere Strings, die maskiert werden müssen, lese ich sie normalerweise von einer externen Ressource.

Es könnte in einer zukünftigen Version von Java (10 oder mehr) sein.

Siehe JEPS 8196004 vom Januar 2018: ( “JEP” ist das “JDK Enhancement Program” )

JEP-Entwurf: Raw String Literals

Fügen Sie der Java-Programmiersprache eine neue Art von Literal, ein Raw-String-Literal, hinzu.
Wie das traditionelle String-Literal erzeugt ein Raw-String-Literal einen String, interpretiert jedoch String-Escapes nicht und kann sich über mehrere Quellcodezeilen erstrecken .

Also statt:

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

Hello World.

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

Sie könnten tippen:

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

Hello World.

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

Ordentlich!

Aber es ist immer noch nur ein Entwurf : Er muss veröffentlicht, eingereicht, Kandidat sein und finanziert werden, bevor er fertiggestellt wird und in das nächste JDK übergeht.

Folgendes scheint für mich zu funktionieren:

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

Ich denke, da Char der primitive Variablentyp für String ist, können Strings und Chars kombiniert werden (zumindest der Eclipse-Compiler scheint sich nicht zu beschweren).

Wenn Sie in der Zeichenfolge ' oder " ausbrechen möchten, können Sie den folgenden Code verwenden:

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