Comment remplacez-vous tous les caractères d'une chaîne qui ne correspondent pas à un critère. J'ai des problèmes spécifiquement avec le non-opérateur.
Plus précisément, j'essaie de supprimer tous les caractères qui ne sont pas un chiffre, j'ai essayé cela jusqu'à présent:
String number = "703-463-9281";
String number2 = number.replaceAll("[0-9]!", ""); // produces: "703-463-9281" (no change)
String number3 = number.replaceAll("[0-9]", ""); // produces: "--"
String number4 = number.replaceAll("![0-9]", ""); // produces: "703-463-9281" (no change)
String number6 = number.replaceAll("^[0-9]", ""); // produces: "03-463-9281"
Pour expliquer: le début d'une classe de caractères annulera cette classe, mais il doit être à l'intérieur de la classe pour que cela fonctionne. Le même caractère en dehors d'une classe de caractères est l'ancre pour le début de la chaîne/ligne.
Vous pouvez essayer cela à la place:
"[^0-9]"
Voici une feuille de triche rapide de la définition de la classe de caractères et de la manière dont il interagit avec certains caractères métagènes de regex.
[aeiou]
- correspond exactement à une voyelle minuscule[^aeiou]
- correspond à un caractère qui N'est pas une voyelle minuscule (nié classe de caractères)^[aeiou]
- correspond à une voyelle minuscule ancrée au début de la ligne[^^]
- correspond à un caractère qui n'est pas un caret/'^'
^[^^]
- correspond à un personnage qui n'est pas caret au début de la ligne^[^.].
- correspond à tout sauf une période littérale, suivie de "n'importe quel" caractère, au début de la ligne[a-z]
- correspond exactement à un caractère dans la touche plage de 'a'
à 'z'
(I.e. toutes les lettres minuscules)[az-]
- correspond à un 'a'
, a 'z'
ou a '-'
(Dash littéral)[.*]*
- correspond à une séquence contiguë (éventuellement vide) de points et d'astérisques[aeiou]{3}
- correspond à 3 voyelles minuscules consécutives (toutes pas nécessairement la même voyelle)\[aeiou\]
- correspond à la chaîne "[aeiou]"