81 votes

Chaînes brutes en Java - pour les regex en particulier. Chaînes de caractères multilignes

Existe-t-il un moyen d'utiliser des chaînes de caractères brutes en Java (sans séquences d'échappement) ?

(J'écris une bonne quantité de code regex et les chaînes brutes rendraient mon code immensément plus lisible).

Je comprends que le langage ne le prévoit pas directement, mais existe-t-il un moyen de les "simuler" de quelque manière que ce soit ?

5 votes

Oh, j'en ai tellement envie. Des chaînes de caractères à plusieurs lignes, aussi. Et peut-être une simple interpolation.

3 votes

Bien que vous n'aimiez pas cela, je pense que cela encourage simplement à mélanger vos données avec votre code. Ce qui est bien avec les REGEX, c'est qu'ils SONT des données et peuvent donc être extraits dans une sorte de table indexée, ce qui simplifie tout le reste de votre code. Les modifications apportées à vos informations ne nécessitent pas une recompilation, il suffit que votre client modifie vos fichiers sources REGEX. C'est vrai pour à peu près tout ce que je considère comme des chaînes de caractères à plusieurs lignes Toujours mieux externe (si rien d'autre, pensez i18n !)

0 votes

Ps. Quand j'étais jeune, un programmeur intelligent a théorisé que les seules constantes en ligne dans votre code devraient être 0 et 1, et que celles-ci ne devraient être utilisées que pour terminer une boucle ou pour comparer des situations qui ne sont plus valables (nous pouvons utiliser foreach au lieu de for(0..)). Je pensais qu'il était fou à l'époque, mais plus je m'améliore, plus cette théorie semble intelligente.

48voto

Dread Points 191

Il s'agit d'une solution de contournement si vous utilisez Eclipse. Vous pouvez obtenir automatiquement des blocs de texte longs correctement alignés et des caractères spéciaux automatiquement échappés lorsque vous collez du texte dans une chaîne littérale.

"-coller ici-" ;

si vous activez cette option dans windowpreferencesjavaEditorTyping "Échapper le texte lors du collage dans un littéral de chaîne de caractères".

6 votes

C'est génial. J'aurais aimé connaître cette fonctionnalité plus tôt !

1 votes

Cela fonctionne aussi dans Netbeans.

40voto

stevedbrown Points 4656

Non, il n'y en a pas.

En général, les chaînes de caractères brutes et les expressions rationnelles sont placées dans un fichier de propriétés, mais celui-ci doit également contenir des séquences d'échappement.

3 votes

Voir ma réponse à cette question. Il y a un moyen de le faire, maintenant. stackoverflow.com/a/16118875/1198772

30voto

ismailsunni Points 83

J'utilise Pattern.quote . Et cela résout le problème de la question. Ainsi :

Pattern pattern = Pattern.compile(Pattern.quote("\r\n?|\n"));

La méthode quote renvoie une chaîne qui correspondrait à l'argument chaîne fourni, dont la chaîne de retour est la chaîne correctement citée dans notre cas.

5 votes

Notez que cela ne fonctionnera pas si les caractères échappés ne sont pas des séquences scape valides pour les littéraux de chaîne Java mais le sont pour les regex, par exemple : "\." .

6 votes

C'est intelligent, mais....aaaaargh. Quelle solution bancale à ce qui devrait être un non-problème dans une langue moderne. Je ne suis même pas sûr que cela en vaille la peine d'après l'observation d'ygormutti.

0 votes

KyleStrand Ce n'est PAS une solution de fortune. Pattern.quote serait nécessaire même si Java disposait de chaînes de caractères brutes : des caractères tels que . et + ne requièrent pas de traitement spécial dans les chaînes de caractères Java, mais ils doivent être échappés pour les expressions régulières. Python prend en charge les chaînes de caractères brutes, mais il a toujours besoin de l'échappement pour les expressions régulières. re.escape .

13voto

jsight Points 16025

Non (malheureusement).

2 votes

C'est la première réponse sur SO que j'ai vue qui a obtenu autant de votes positifs en exploitant simplement les émotions des programmeurs Java xD

5voto

Placez le fichier texte brut dans le chemin de votre classe et lisez-le avec getResourceAsStream(....).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X