Java-Äquivalent der wörtlichen Zeichenfolgen von C # mit @

101

Schnelle Frage. Gibt es ein Äquivalent von @ für Zeichenfolgen in Java:

Zum Beispiel kann ich @"c:\afolder\afile"in C # die Escape-Zeichen bei der Verarbeitung ignorieren, anstatt dies tun zu müssen "c:\\afolder\\aFile". Gibt es ein Java-Äquivalent?

hmmm: stackoverflow entweicht mir .. lol. Das zweite Beispiel sollte lauten:

c: (doppelter Backslash) Ordner (doppelter Backslash) aDatei

Simon Rigby
quelle
2
Mögliches Duplikat von: stackoverflow.com/questions/2018556/…
codaddict
2
Hat sich die Freiheit genommen, den Titel zu klären, da @auch Sprachschlüsselwörter als Bezeichner verwendet werden können.
Joey
@unicornaddict - ja, es ist in der Tat die gleiche Frage. Entschuldigungen haben das bei der Suche nicht gesehen. @ Johannes - guter Zug .. danke
Simon Rigby
Wenn Sie genau das in Windows tun möchten und Windows XP oder neuer verwenden (und Sie sollten!), Können Sie einfach File file = new File ("C: / afolder / afile") ausführen. Wenn Sie dagegen portabler sein möchten, sollten Sie sich die hervorragende Antwort von @CPerkins ansehen.
Haakon Løtveit
Hinweis (Januar 2018): Für Java (JDK 10 oder höher) werden möglicherweise unformatierte Zeichenfolgenliterale verwendet: Siehe Gibt es in Java eine Möglichkeit, ein Zeichenfolgenliteral zu schreiben, ohne Anführungszeichen zu umgehen? .
VonC

Antworten:

77

Nein . Das Escaping / Externalisieren der Zeichenfolge ist Ihre einzige Wahl.

Kent Boogaart
quelle
7
Ich liebe C # 6 mit @ "String" und $ "String {i}" und sehr Futures mehr als Java
Guido Mocha
4
Von C # nach Java zu kommen, ist in vielerlei Hinsicht oft ein Schritt nach unten
MikeKulls
33

Nein, Java hat keine wörtlichen String-Literale .

Wenn Sie eine Java-ähnlich (und Java-VM-basierte) Sprache mögen, tut aber, mögen Sie vielleicht sehen Groovy , die hat verschiedene Formen von Stringliteral .

Jon Skeet
quelle
Der erste Link (wörtliche Zeichenfolgenliterale) verweist auf "Visual Studio 2003 Retired Technical Documentation" groovy.codehaus.org -Links sind unterbrochen
Vladas Maier
1
@ace: Aktualisiert auf den aktuellen Artikel "string", der einen Abschnitt über wörtliche String-Literale enthält. Auch aktualisierte Groovy Links.
Jon Skeet
16

Wie Kent und Jon gesagt haben, gibt es keine.

Ich antworte nur, um darauf hinzuweisen, dass selbst wenn es für Ihren speziellen Fall eine schlechte Idee wäre, im allgemeinen Fall ein mehr als einmaliges Programm anzunehmen.

Java-Programme laufen auf mehr Plattformen als nur Windows, und andere Plattformen haben andere Dateibegrenzer. Anstatt sich mit maskierten Backslashes zu befassen, können Sie Ihr spezielles Beispiel korrekt verarbeiten, indem Sie die Eigenschaft "Dateitrennzeichen" abrufen:


    String sep = System.getProperty("file.separator");
    String filename = ROOTDIR + sep + "folder" + sep + "afile";

Wo Sie ROOTDIR basierend auf einer Richtlinie separat erstellt hätten - nicht nur auf der Plattform, sondern auch darauf, ob Ihre "Datei" relativ zum tatsächlichen Dateisystemstamm oder relativ zum Basisverzeichnis des Benutzers sein soll.

Durch die Verwendung der Eigenschaft zum Trennen von Dateien können Ihre Programme jedoch besser verwendet werden. Ist es mehr Arbeit? Ja. Wie Wanda Sykes sagt: "Aber es lohnt sich".

CPerkins
quelle
1
Hiya und danke. die Tatsache, dass es in meinem Fall ein 'Dateiname' ist, ist irgendwie irrelevant. Alles, was mein Code tut, ist, eine Zeichenfolge zu nehmen (oder zu versuchen) und sie weiterzugeben. Ich mache eigentlich nichts anderes damit, als es an einen Webdienst weiterzugeben. Ich habe die Antwort des von Java aufgerufenen ac # WCF-Dienstes getestet. Da ich nur einen Test hart codiert habe, habe ich an diesem Punkt diese Einschränkung entdeckt. Ich mache eigentlich nichts 'dateibasiertes' mit der Zeichenfolge.
Simon Rigby
2
Wörtliche Zeichenfolgen eignen sich hervorragend für Regex-Muster.
Gordon Bean
12

Derzeit wird es in Java nicht unterstützt, könnte aber in zukünftigen Versionen verfügbar sein. Am 23.01.2018 wurde JEP 326: Raw String Literals erstellt

Den Fortschritt finden Sie unter https://bugs.openjdk.java.net/browse/JDK-8196004

Wahrscheinlich werden Sie es eines Tages tun können mit:

`c:\afolder\afile`

UPDATE: JEP schlägt vor, JDK 12: 326: Raw String Literals (Vorschau) zu löschen. Sie können die Gründe hier lesen: http://mail.openjdk.java.net/pipermail/jdk-dev/2018-December/002402.html

Weitere Details finden Sie hier https://bugs.openjdk.java.net/browse/JDK-8215682

Fazit : In naher Zukunft wird es in Java keine wörtlichen Zeichenfolgen geben. Und selbst wenn es erscheint, wird es eher nicht `` sein.

engilyin
quelle
1
Da dies eine der beliebtesten Diskussionen in dieser Angelegenheit ist, wurde JEP 326 zurückgezogen. Die Diskussion wurde im Januar 2019 neu gestartet und wird jetzt in JEP 355 für eine JDK13-Version verfolgt.
NPras