Je lis un fichier source en Java, mais quand je l'imprime (sysout), les caractères échappés ne sont plus échappés. Comment puis-je échapper des personnages comme \n
et \t
dans une chaîne en Java?
Vous devez utiliser la classe StringEscapeUtils
de Apache Commons Text (vous pouvez également trouver la classe dans Apache Commons Lang3 mais celle-ci est déconseillée). Vous constaterez qu'il existe de nombreuses autres offres dans Apache Commons qui pourraient être utiles pour d'autres problèmes que vous rencontrez dans le développement Java, afin de ne pas réinventer la roue.
L'appel spécifique que vous voulez a à voir avec "Java échappant"; l'appel d'API est StringEscapeUtils.escapeJava()
. Par exemple:
System.out.println(StringEscapeUtils.escapeJava("Hello\r\n\tW\"o\"rld\n")
imprimerait:
Hello\r\n\tW\"o\"rld\n
Il existe également de nombreux autres utilitaires d'échappement dans cette bibliothèque. Vous pouvez trouver Texte Apache Commons dans Maven Central et vous l'ajouteriez à votre projet Maven comme ceci:
<dependency>
<groupId>org.Apache.commons</groupId>
<artifactId>commons-text</artifactId>
<version>1.3</version>
</dependency>
et au cas où vous utilisez Gradle:
compile "org.Apache.commons:commons-text:1.3"
StringEscapeUtils est bon pour les opérations liées aux chaînes
En utilisant:
\\n
et \\t
Certains caractères précédés d'une barre oblique inverse (\
) forme une séquence d'échappement et a une signification particulière pour le compilateur. Donc dans votre cas \n
et \t
sont traités comme spéciaux (nouvelle ligne et tabulation respectivement). Nous devons donc échapper à la barre oblique inverse pour que n
et t
soient traités littéralement.
Donné String s
,
s = s.replace("\\", "\\\\");
Remplace tous les \
avec \\
.