web-dev-qa-db-fra.com

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 j'ai besoin de la mettre en minuscule et de supprimer toute ponctuation. Voici mon code:

    String[] words = instring.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 n'arrive pas à trouver un moyen de supprimer tous les caractères autres que des lettres. J'ai essayé d'utiliser des regex et des itérateurs sans succès. Merci pour toute aide.

55
TheDoctor

Cela supprime d’abord tous les caractères non-lettres, se plie en minuscules, puis divise l’entrée en effectuant tout le travail sur une seule ligne:

String[] words = instring.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 nuls avant en scindant, vous évitez de passer en boucle à travers les éléments.

98
Bohemian

Vous pouvez utiliser ce qui suit construction d’expression régulière

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

inputString.replaceAll("\\p{Punct}", "");
9
ravthiru

Vous pouvez essayer ceci: -

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

[^\w] correspond à un caractère autre que Word. Par conséquent, l'expression régulière ci-dessus correspond à tous les caractères autres que Word et les supprime.

5
Rahul Tripathi

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 String modified(final String input){
    final StringBuilder builder = new StringBuilder();
    for(final char c : input.toCharArray())
        if(Character.isLetterOrDigit(c))
            builder.append(Character.isLowerCase(c) ? c : Character.toLowerCase(c));
    return builder.toString();
}

Il fait une boucle à travers le char[] dans String et n’ajoute le char que s’il s’agit d’une lettre ou d’un chiffre (en filtrant tous les symboles, ce que je suppose, c’est ce que vous essayez d’accomplir), puis version de cas du char.

3
Josh M