Comment puis-je supprimer la ponctuation du texte saisi en Java?

J’essaie d’obtenir une phrase en utilisant les entrées de l’utilisateur en Java, et je dois la rendre en minuscule et supprimer toutes les ponctuations. Voici mon code:

Ssortingng[] words = inssortingng.split("\\s+"); for (int i = 0; i < words.length; i++) { words[i] = words[i].toLowerCase(); } String[] wordsout = new String[50]; Arrays.fill(wordsout,""); int e = 0; for (int i = 0; i < words.length; i++) { if (words[i] != "") { wordsout[e] = words[e]; wordsout[e] = wordsout[e].replaceAll(" ", ""); e++; } } return wordsout; 

Je ne peux pas sembler trouver un moyen de supprimer tous les caractères non-lettre. J’ai essayé d’utiliser des expressions rationnelles et des iterators sans succès. Merci pour toute aide.

Cela supprime d’abord tous les caractères autres que des lettres, les plie en minuscules, puis divise les entrées en faisant tout le travail sur une seule ligne:

 Ssortingng[] words = inssortingng.replaceAll("[^a-zA-Z ]", "").toLowerCase().split("\\s+"); 

Les espaces sont initialement laissés dans l’entrée afin que le fractionnement fonctionne toujours.

En supprimant les caractères inutiles avant la division, vous évitez de faire une boucle entre les éléments.

Vous pouvez essayer ceci:

 Scanner scan = new Scanner(System.in); System.out.println("Type a sentence and press enter."); Ssortingng input = scan.nextLine(); Ssortingng ssortingppedInput = input.replaceAll("\\W", ""); System.out.println("Your ssortingng: " + ssortingppedInput); 

[^\w] correspond à un caractère non-mot, donc l’expression régulière ci-dessus correspondra et supprimera tous les caractères non-mots.

Si vous ne voulez pas utiliser RegEx (ce qui semble très inutile compte tenu de votre problème), vous devriez peut-être essayer quelque chose comme ceci:

 public Ssortingng modified(final Ssortingng input){ final SsortingngBuilder builder = new SsortingngBuilder(); for(final char c : input.toCharArray()) if(Character.isLetterOrDigit(c)) builder.append(Character.isLowerCase(c) ? c : Character.toLowerCase(c)); return builder.toSsortingng(); } 

Il parcourt le caractère sous-jacent char[] de la Ssortingng et n’ajoute le caractère que s’il s’agit d’une lettre ou d’un chiffre (en filtrant tous les symboles, ce que je suppose être ce que vous essayez d’accomplir), puis ajoute la version minuscule du char .

Vous pouvez utiliser une construction d’expression régulière suivante

Ponctuation: Un des! “# $% & ‘() * +, -. / :; <=>? @ [] ^ _` {|} ~

 inputSsortingng.replaceAll("\\p{Punct}", ""); 

Je n’aime pas utiliser les regex, alors voici une autre solution simple.

 public Ssortingng removePunctuations(Ssortingng s) { Ssortingng res = ""; for (Character c : s.toCharArray()) { if(Character.isLetterOrDigit(c)) res += c; } return res; } 

Note: Cela inclura les lettres et les chiffres