La chaîne que vous donnez à split
est la chaîne sous forme d'expression régulière, donc:
private void getId(String pdfName){
String[] tokens = pdfName.split("[-.]");
// ...
}
Cela signifie "diviser sur n'importe quel caractère à l'intérieur des []
" (donc, diviser sur -
et .
). Quelques remarques à ce sujet:
- Normalement, vous devez échapper le point (
.
) en mettant un antislash devant car dans une expression régulière, .
signifie "n'importe quel caractère." Mais vous n'avez pas à le faire à l'intérieur d'une classe de caractères ([]
).
- Normalement, à l'intérieur d'une classe de caractères (
[]
), vous devez échapper le tiret (-
) car dans ce contexte il a une signification particulière (il indique une plage, comme [0-9A-Fa-f]
pour correspondre à tous les chiffres hexadécimaux). Mais quand c'est le premier caractère après le [
, nous n'avons pas à l'échapper.
Si vous deviez échapper l'un de ces caractères, la manière de le faire serait d'avoir un antislash devant dans la chaîne. Comme nous écrivons ceci sous forme de chaîne littérale, pour réellement mettre un antislash dans la chaîne, il faut l'échapper, sinon c'est un caractère d'échappement (par exemple, \n
signifie saut de ligne, \t
signifie tabulation, etc.). Donc nous devrions écrire \\
pour mettre réellement un antislash dans la chaîne pour que le moteur d'expression régulière le voie et l'utilise pour échapper le prochain caractère (-
ou .
). Par exemple, "[\\-.]"
si nous voulions échapper le -
même si ce n'est pas nécessaire.
Exemple en direct: https://ideone.com/PMA8d3
0 votes
Selon ce que vous avez dit, il semble que ça fonctionne bien. Quel est votre résultat souhaité?
3 votes
@Jeff : Il a montré sa sortie désirée (
AA
/BB
/CC
...)2 votes
Êtes-vous sûr? J'ai interprété cela comme sa sortie actuelle, pas sa sortie souhaitée. Peut-être est-il temps de se lever et de faire un peu de marche.
1 votes
@Jeff: Désolé pour la confusion, j'ai mis à jour mon message pour dissiper votre malentendu.
0 votes
Les expressions régulières vont dégrader vos performances. Je recommanderais d'écrire une méthode qui ira caractère par caractère et divisera la chaîne si nécessaire. Vous pouvez optimiser cela davantage pour obtenir des performances en log(n).