Equivalent Java des chaînes verbatim de C # avec @

101

Question rapide. Existe-t-il un équivalent de @ appliqué aux chaînes en Java:

Par exemple, je peux faire @"c:\afolder\afile"en C # et lui faire ignorer les caractères d'échappement lors du traitement au lieu d'avoir à le faire "c:\\afolder\\aFile". Existe-t-il un équivalent Java?

hmmm: stackoverflow s'échappe sur moi .. lol. Le deuxième exemple devrait lire:

c: (double barre oblique inverse) dossier (double barre oblique inverse) aFichier

Simon Rigby
la source
2
Copie
2
A pris la liberté de clarifier le titre car il @peut également être utilisé pour utiliser des mots-clés de langue comme identificateurs.
Joey
@unicornaddict - oui, c'est la même question. Les excuses n'ont pas vu cela lors de la recherche. @ Johannes - bon mouvement .. merci
Simon Rigby
Si vous voulez faire juste cela sous Windows, et que vous utilisez Windows XP ou plus récent (et vous devriez!), Alors vous pouvez simplement faire File file = new File ("C: / afolder / afile"); D'un autre côté, si vous voulez être plus portable, vous devriez regarder l'excellente réponse de @CPerkins.
Haakon Løtveit
Remarque (janvier 2018), des littéraux de chaîne bruts pourraient arriver pour Java (JDK 10 ou plus): voir En Java, existe-t-il un moyen d'écrire un littéral de chaîne sans avoir à échapper les guillemets? .
VonC le

Réponses:

77

Non . Echapper / externaliser la chaîne est votre seul choix.

Kent Boogaart
la source
7
j'aime c # 6 avec @ "string" et $ "string {i}" et très futurs plus que java
Guido Mocha
4
Venir de C # à Java, c'est assez souvent une étape vers le bas à bien des égards
MikeKulls
33

Non, Java n'a pas de littéraux de chaîne verbatim .

Si vous voulez un langage de type Java (et basé sur Java-VM) qui le fait , vous voudrez peut-être regarder Groovy qui a différentes formes de littéral de chaîne .

Jon Skeet
la source
Le premier lien (littéraux de chaîne verbatim) pointe vers «Visual Studio 2003 Retired Technical documentation» Les groovy.codehaus.org liens sont rompus
Vladas Maier
1
@ace: mise à jour de l'article "string" actuel, qui comprend une section sur les littéraux de chaîne verbatim. Liens Groovy également mis à jour.
Jon Skeet
16

Comme Kent et Jon l'ont dit, non, il n'y en a pas.

Je réponds simplement pour souligner que même s'il y en avait, pour votre cas particulier, ce serait une mauvaise idée dans le cas général, en supposant un programme plus que ponctuel.

Les programmes Java s'exécutent sur plus de plates-formes que Windows, et d'autres plates-formes ont des délimiteurs de fichiers différents. Ainsi, au lieu de traiter les contre-obliques d'échappement, la bonne façon de gérer votre exemple particulier est d'obtenir la propriété de séparateur de fichier:


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

Où vous auriez créé ROOTDIR séparément sur la base d'une politique - non seulement la plate-forme, mais si vous voulez que votre «fichier» soit relatif à la racine du système de fichiers réel, ou relatif au répertoire personnel de l'utilisateur.

Mais certainement, l'utilisation de la propriété de séparateur de fichiers rend vos programmes plus largement utilisables. Est-ce plus de travail? Oui. Comme le dit Wanda Sykes, "Mais ça vaut le coup".

CPerkins
la source
1
Hiya et merci. le fait que c'est un «nom de fichier» dans mon cas en quelque sorte sans importance. Tout ce que mon code fait, c'est prendre une chaîne (ou essayer de) et la transmettre. Je ne fais rien d'autre que le transmettre à un service Web. Je testais la réponse du service ac # WCF appelé depuis Java. Comme je ne faisais que coder en dur un test, c'est à ce stade que j'ai découvert cette limitation. Je ne fais rien de «basé sur un fichier» avec la chaîne.
Simon Rigby
2
Les chaînes Verbatim sont idéales pour les modèles de regex.
Gordon Bean
12

Actuellement, il n'est pas pris en charge en Java mais pourrait être disponible dans les versions futures. Il a été créé JEP 326: Raw String Literals au 23/01/2018

Voir les progrès sur https://bugs.openjdk.java.net/browse/JDK-8196004

Vous pourrez probablement un jour le faire avec:

`c:\afolder\afile`

MISE À JOUR: JEP a proposé de supprimer du JDK 12: 326: Littéraux de chaîne bruts (aperçu) Vous pouvez lire la justification ici: http://mail.openjdk.java.net/pipermail/jdk-dev/2018-December/002402.html

Et plus de détails ici https://bugs.openjdk.java.net/browse/JDK-8215682

L'essentiel : il n'y aura pas de chaînes textuelles en Java dans un proche avenir. Et même si ça va apparaître ça ne le sera pas plutôt ''.

engilyin
la source
1
Étant donné qu'il s'agit de l'une des discussions les plus populaires sur le sujet, le JEP 326 a été retiré. La discussion a redémarré en janvier 2019 et est désormais suivie dans JEP 355 pour une version JDK13.
NPras