web-dev-qa-db-fra.com

Java équivalent des chaînes textuelles de C # avec @

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 demandez-lui d'ignorer les caractères d'échappement lors du traitement au lieu d'avoir à faire "c:\\afolder\\aFile". Existe-t-il un Java équivalent?

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

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

97
Simon Rigby

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

70
Kent Boogaart

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

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

30
Jon Skeet

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

Je réponds juste pour souligner que même s'il y 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 antislashs échappés, la bonne façon de gérer votre exemple particulier consiste à obtenir la propriété de séparation de fichiers:


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

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

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

15
CPerkins

Actuellement, il n'est pas pris en charge dans Java mais pourrait être disponible dans les futures versions. Il a été créé JEP 326: Littéraux de chaîne bruts au 23/01/2018

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

Un jour, vous pourrez probablement le faire avec:

`c:\afolder\afile`

MISE À JOUR: JEP a proposé de supprimer JDK 12: 326: chaîne brute Literals (Preview) 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

La ligne du bas : Il n'y aura pas de chaînes textuelles dans Java dans un futur proche. Et même si cela apparaîtra plutôt ne sera pas ''.

10
engilyin