J'ai besoin de diviser une base de chaîne sur le délimiteur -
et .
. Voici ma sortie souhaitée.
AA.BB-CC-DD.zip
->
AA
BB
CC
DD
zip
mais mon code suivant ne fonctionne pas.
private void getId(String pdfName){
String[]tokens = pdfName.split("-\\.");
}
AA
/BB
/CC
...)Réponses:
Je pense que vous devez inclure l' opérateur regex OR :
Ce que vous avez correspondra:
[DASH suivi de DOT ensemble]
-.
pas
[DASH ou DOT aucun d'entre eux]
-
ou.
la source
.
caractère dans l'expression régulière signifie tout caractère autre que la nouvelle ligne. tutorialspoint.com/java/java_regular_expressions.htm Dans ce cas, cependant, ils voulaient le caractère réel.
. Les deux barres obliques inverses indiquent que vous faites référence à.
. La barre oblique inverse est un caractère d'échappement..split("match1|match2")
(par exemplesplit("https|http")
), \\ est d'échapper au caractère spécial.
dans le cas ci-dessuspdfName.split("\\W");
comme ci-dessous @Peter Knego answer[-.]
au lieu de-|\\.
Essayez cette expression régulière
"[-.]+"
. Le signe + après traite les caractères de délimiteur consécutifs comme un seul. Supprimez plus si vous ne le souhaitez pas.la source
-
que c'est la première pensée à l'intérieur du[]
, sinon il devrait y avoir une barre oblique inverse devant (et bien sûr, pour mettre une barre oblique inverse devant, nous besoin de deux parce que c'est un littéral de chaîne).Vous pouvez utiliser l'expression régulière "\ W". Cela correspond à tout caractère autre qu'un mot. La ligne requise serait:
la source
\W
.La chaîne que vous donnez
split
est la forme de chaîne d'une expression régulière, donc:Cela signifie de diviser n'importe quel caractère dans le
[]
(nous devons nous échapper-
avec une barre oblique inverse parce que c'est spécial à l'intérieur[]
; et bien sûr, nous devons échapper à la barre oblique inverse parce que c'est une chaîne). (Inversement,.
est normalement spécial mais n'est pas spécial à l'intérieur[]
.)la source
[-.]
il est impossible de l'interpréter comme une plage.String[] strings = codes.get(x).split("\\[|\\]| ");
<- code pour toute personne intéresséeEn utilisant Guava, vous pouvez faire ceci:
la source
Pour deux séquences de caractères en tant que délimiteurs "ET" et "OU" cela devrait être travaillé. N'oubliez pas de couper pendant l'utilisation.
Résultat: cities = {"ISTANBUL", "NEW YORK", "PARIS", "TOKYO", "MOSCOW"}
la source
J'utiliserais Apache Commons:
importer
org.apache.commons.lang3.StringUtils;
Il se divisera sur l'un des séparateurs spécifiés, par opposition à celui
StringUtils.splitByWholeSeparator(str, separator)
qui utilise la chaîne complète comme séparateurla source
la source
Il vaut mieux utiliser quelque chose comme ça:
J'ai ajouté quelques autres personnages comme échantillon. C'est la façon la plus sûre d'utiliser, car la manière
.
et'
est traitée.la source
Vous pouvez également spécifier l'expression régulière comme argument dans la méthode split () ..voir l'exemple ci-dessous ....
la source
Essayez ce code:
la source
devrait marcher.
la source
Si vous savez que la piqûre sera toujours dans le même format, divisez d'abord la chaîne en fonction de
.
et stockez la chaîne au premier index dans une variable. Ensuite, divisez la chaîne dans le deuxième index en fonction de-
et stockez les index 0, 1 et 2. Enfin, divisez l'index 2 du tableau précédent en fonction de.
et vous devriez avoir obtenu tous les champs pertinents.Reportez-vous à l'extrait de code suivant:
la source
pdfName.split(".")
résulte en un tableau de longueur nulle..
Doit être échappé comme\\.