J'essaie d'écrire une méthode qui supprime tous les caractères non alphabétiques d'un String[]
Java, puis convertit la chaîne en chaîne minuscule. J'ai essayé d'utiliser l'expression régulière pour remplacer l'occurrence de tous les caractères non alphabétiques par ""
. Cependant, la sortie que je reçois ne peut pas le faire. Voici le code
static String[] inputValidator(String[] line) {
for(int i = 0; i < line.length; i++) {
line[i].replaceAll("[^a-zA-Z]", "");
line[i].toLowerCase();
}
return line;
}
Cependant, si j'essaie de fournir une entrée qui ne contient pas d'alphabet (par exemple, -
ou .
), la sortie est également composée d'eux, car ils ne sont pas supprimés.
Exemple d'entrée
A dog is an animal. Animals are not people.
Sortie que je reçois
A
dog
is
an
animal.
Animals
are
not
people.
Résultat attendu
a
dog
is
an
animal
animals
are
not
people
Le problème est que vos modifications ne sont pas stockées car les chaînes sont immuables . Chacun des appels de méthode renvoie une nouvelle String
représentant le changement, la String
actuelle restant la même. Il vous suffit de stocker la String
renvoyée dans le tableau.
line[i] = line[i].replaceAll("[^a-zA-Z]", "");
line[i] = line[i].toLowerCase();
Étant donné que chaque méthode renvoie String
, vous pouvez chaîner vos appels de méthode ensemble. Cela effectuera le deuxième appel de méthode sur le résultat du premier, vous permettant ainsi de faire les deux actions sur une seule ligne.
line[i] = line[i].replaceAll("[^a-zA-Z]", "").toLowerCase();
Vous devez affecter le résultat de votre expression rationnelle à la ligne [i].
for ( int i = 0; i < line.length; i++) {
line[i] = line[i].replaceAll("[^a-zA-Z]", "").toLowerCase();
}
Cela ne fonctionne pas parce que les chaînes sont immuables, vous devez définir une valeur
line[i] = line[i].toLowerCase();
Vous devez réaffecter le résultat de toLowerCase()
et replaceAll()
à line[i]
, car Java String
est immuable (sa valeur interne ne change jamais et les méthodes de la classe String
renverront un nouvel objet String
au lieu de modifier l'objet String
.
Comme il a déjà répondu, je viens de penser à partager un autre moyen qui n'a pas été mentionné ici>
str = str.replaceAll("\\P{Alnum}", "").toLowerCase();
Une façon cool (mais un peu lourde, si vous n'aimez pas le casting) de faire ce que vous voulez faire est de parcourir toute la chaîne, index par index, en convertissant chaque résultat de String.charAt (index) en (octet), et puis en vérifiant si cet octet est soit a) dans la plage numérique des caractères alphabétiques minuscules (a = 97 à z = 122), auquel cas le reconvertir en caractère et l'ajouter à une chaîne, un tableau ou quoi -Avez-vous ou b) dans la plage numérique des caractères alphabétiques majuscules (A = 65 à Z = 90), auquel cas ajoutez 32 (A + 22 = 65 + 32 = 97 = a) et transposez-le en et ajoutez-le. S'il ne figure dans aucune de ces plages, jetez-le simplement.
Vous pouvez également utiliser Arrays.setAll
pour cela:
Arrays.setAll(array, i -> array[i].replaceAll("[^a-zA-Z]", "").toLowerCase());