0
votes

La chaîne de fractionnement donne une exception hors limites

J'ai besoin de me débarrasser de toute la ponctuation de la phrase (STR), mais lorsque je divise la chaîne et essayez de vérifier chaque index, il jette une exception xxx pré>

i obtenir ce qui suit ERREUR: P>

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 1
    at java.lang.String.charAt(String.java:658)
    at StringMethods.main(StringMethods.java:109)


3 commentaires

Vous vous séparez sur chaque lettre, puis vous appelez .chardat (k) sur la lettre 1 lettre string . Lorsque k est plus que 0 il sort des limites


Ne comparez pas non plus à string S avec ! = ou == , utilisez .equals ()


String Newstring = str.replaceall ("[^ a-za-z 0-9]" "," ") .ReplaceAll (" \\ s {2,} "," ") .trim ();


3 Réponses :


0
votes

problème est arr3 [k] .chard (k) code>. Arr3 [k] Vous donne une seule chaîne de caractères peut donc indiquer que 0. Le temps que vous trouvez index> 0 (k> 0 dans ce cas), il lancera stressindexoutofboundsException. Au lieu de cela, vous pouvez utiliser la chaîne contient la méthode pour trouver une solution à votre problème.

        String punct = ",./;:'\"?<>[]{}|`~!@#$%^&*()";
        String finaltext = "";
        System.out.println(str);
        String[] arr3 = str.split("");
        for (int k = 0; k < arr3.length; k++) {
            if (!punct.contains(arr3[k])) {
                finaltext += arr3[k] + "";
            }
        }
    }


0 commentaires

1
votes

Si vous enlevez toute la ponctuation, vous pouvez simplement faire ce que vous voulez réaliser, vous pouvez simplement le faire:

str.replaceAll("[^a-zA-Z 0-9]", "").replaceAll("\\s+", " ").trim();


0 commentaires

0
votes

ok essayer ceci,

solution optimisée :) xxx


1 commentaires

Le remplacement a besoin de regex !!