97 votes

Comment remplacer les caractères Unicode non imprimables en Java ?

Les éléments suivants remplaceront les caractères de contrôle ASCII (abréviation de [\x00-\x1F\x7F] ) :

my_string.replaceAll("\\p{Cntrl}", "?");

Le texte suivant remplacera tous les caractères non imprimables ASCII (abréviation de [\p{Graph}\x20] ), y compris les caractères accentués :

my_string.replaceAll("[^\\p{Print}]", "?");

Toutefois, ni l'un ni l'autre ne fonctionne pour les chaînes Unicode. Quelqu'un connaît-il un bon moyen de supprimer les caractères non imprimables d'une chaîne unicode ?

2 votes

Juste un addendum : la liste des catégories générales d'Unicode peut être trouvée dans UAX #44

1 votes

1 votes

@Stewart : salut, avez-vous regardé les questions/réponses en dehors du titre ?!?

0voto

user1300830 Points 59

J'ai utilisé cette fonction simple pour cela :

private static Pattern pattern = Pattern.compile("[^ -~]");
private static String cleanTheText(String text) {
    Matcher matcher = pattern.matcher(text);
    if ( matcher.find() ) {
        text = text.replace(matcher.group(0), "");
    }
    return text;
}

J'espère que cela vous sera utile.

0voto

RyanLeiTaiwan Points 369

Sur la base des réponses de Op De Cirkel y noackjr Pour le nettoyage général des chaînes de caractères, je fais ce qui suit : 1. couper les espaces avant et arrière, 2. dos2unix, 3. mac2unix, 4. supprimer tous les "caractères Unicode invisibles" sauf les espaces :

myString.trim.replaceAll("\r\n", "\n").replaceAll("\r", "\n").replaceAll("[\\p{Cc}\\p{Cf}\\p{Co}\\p{Cn}&&[^\\s]]", "")

Testé avec Scala REPL.

0voto

Ramesh Bathini Points 31

Je propose de supprimer les caractères non imprimables comme ci-dessous au lieu de les remplacer.

private String removeNonBMPCharacters(final String input) {
    StringBuilder strBuilder = new StringBuilder();
    input.codePoints().forEach((i) -> {
        if (Character.isSupplementaryCodePoint(i)) {
            strBuilder.append("?");
        } else {
            strBuilder.append(Character.toChars(i));
        }
    });
    return strBuilder.toString();
}

0voto

selami tastan Points 16

Multilingue pris en charge

public static String cleanUnprintableChars(String text, boolean multilanguage)
{
    String regex = multilanguage ? "[^\\x00-\\xFF]" : "[^\\x00-\\x7F]";
    // strips off all non-ASCII characters
    text = text.replaceAll(regex, "");

    // erases all the ASCII control characters
    text = text.replaceAll("[\\p{Cntrl}&&[^\r\n\t]]", "");

    // removes non-printable characters from Unicode
    text = text.replaceAll("\\p{C}", "");

    return text.trim();
}

-4voto

Kairat Koibagarov Points 119

J'ai redessiné le code pour les numéros de téléphone +9 (987) 124124 Extraire les chiffres d'une chaîne de caractères en Java

 public static String stripNonDigitsV2( CharSequence input ) {
    if (input == null)
        return null;
    if ( input.length() == 0 )
        return "";

    char[] result = new char[input.length()];
    int cursor = 0;
    CharBuffer buffer = CharBuffer.wrap( input );
    int i=0;
    while ( i< buffer.length()  ) { //buffer.hasRemaining()
        char chr = buffer.get(i);
        if (chr=='u'){
            i=i+5;
            chr=buffer.get(i);
        }

        if ( chr > 39 && chr < 58 )
            result[cursor++] = chr;
        i=i+1;
    }

    return new String( result, 0, cursor );
}

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