83 votes

Comment supprimer la ponctuation d'un texte saisi en Java ?

J'essaie d'obtenir une phrase en utilisant l'entrée de l'utilisateur en Java, et j'ai besoin de la mettre en minuscules et d'enlever toute la 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 non alphabétiques. J'ai essayé d'utiliser des regex et des itérateurs sans succès. Merci pour votre aide.

144voto

Bohemian Points 134107

Il supprime d'abord tous les caractères non alphabétiques, les met en minuscules, puis scinde l'entrée, effectuant tout le travail sur une seule ligne :

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

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

En éliminant les personnages indésirables avant vous évitez d'avoir à parcourir les éléments en boucle.

33voto

ravthiru Points 3337

Vous pouvez utiliser les éléments suivants construction d'une expression régulière

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

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

10voto

Rahul Tripathi Points 1

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 non verbal, de sorte que l'expression régulière ci-dessus correspondra à tous les caractères non verbaux et les supprimera.

6voto

Josh M Points 4212

Si vous ne voulez pas utiliser RegEx (ce qui semble tout à fait 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 passe en boucle par le système sous-jacent char[] dans le String et n'ajoute que le char s'il s'agit d'une lettre ou d'un chiffre (en filtrant tous les symboles, ce qui, je suppose, est ce que vous essayez d'accomplir) et ajoute ensuite la version minuscule de l'élément char .

3voto

Nerzid Points 147

Je n'aime pas utiliser les expressions rationnelles, alors voici une autre solution simple.

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

Remarque : il s'agit des lettres et des chiffres.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X