Échapper une virgule lors de l'utilisation de String.split
Je suis en train de réaliser une superbe analyse simple o fichiers journaux, donc je suis en utilisant String.split
méthode comme ceci:
String [] parts = input.split(",");
Et fonctionne très bien pour une entrée comme:
a,b,c
Ou
type=simple, output=Hello, repeat=true
Juste pour dire quelque chose.
Comment puis-je échapper à la virgule, donc il ne correspond pas aux intermédiaires des virgules?
Par exemple, si je veux inclure une virgule dans l'une des parties:
type=simple, output=Hello, world, repeate=true
Je pensais à quelque chose comme:
type=simple, output=Hello\, world, repeate=true
Mais je ne sais pas comment créer la division pour éviter correspondant à la virgule.
J'ai essayé:
String [] parts = input.split("[^\,],");
Mais bon, il n'est pas de travail.
source d'informationauteur OscarRyz
Vous devez vous connecter pour publier un commentaire.
Vous pouvez le résoudre à l'aide d'un négatif regarder derrière.
Fondamentalement, il dit, split sur chaque
", "
qui n'est pas précédé d'une barre oblique inverse.De sortie:
(ideone.com lien)
Si vous arrive d'être coincé avec le non-échappé à valeurs séparées par des virgules, vous pouvez effectuer les opérations suivantes (similaire) hack:
Qui dit split sur chaque
", "
qui est suivi d'un mot-caractères et un =(ideone.com lien)
J'ai peur, il n'y a pas de solution parfaite pour
String.split
. À l'aide d'un comparateur pour les trois parties serait de travailler. Dans le cas où le nombre de pièces n'est pas constant, je vous recommande une boucle avecmatcher.find
. Quelque chose comme ceci peut-êtreVous aurez probablement envie de sauter les espaces après les virgules:
Ce n'est pas vraiment compliqué, il suffit de noter que vous avez besoin de quatre barres obliques inverses afin de correspondre à l'un.
Échapper fonctionne à l'opposé de aioobe réponse (mis à jour: aioobe utilise maintenant la même construction mais je ne savais pas que lorsque j'ai écrit ce), négatif lookbehind
De sortie:
Référence:
Je pense que
devrait fonctionner. Il se divise, à toutes les virgules qui ne sont pas précédés d'une barre oblique inverse.
BTW, si vous travaillez avec Eclipse, je peux vous recommander le QuickRex Plugin pour tester et déboguer les Regexes.