Charava Maker

Goyave CharMatcher

Dans ce rapide didacticiel, nous allons explorer la classe utilitaireCharMatcher dans Guava.

1. Supprimer les caractères spéciaux d'unString

Commençons par supprimer tous les caractères spéciaux d'unString.

Dans l'exemple suivant, nous supprimons tous les caractères qui ne sont pas des chiffres ou des lettres à l'aide deretainFrom():

@Test
public void whenRemoveSpecialCharacters_thenRemoved(){
    String input = "H*el.lo,}12";
    CharMatcher matcher = CharMatcher.JAVA_LETTER_OR_DIGIT;
    String result = matcher.retainFrom(input);

    assertEquals("Hello12", result);
}

2. Supprimer les caractères non ASCII de la chaîne

Nous pouvons également utiliserCharMatcher pour supprimer les caractères non ASCII d'unString comme dans l'exemple suivant:

@Test
public void whenRemoveNonASCIIChars_thenRemoved() {
    String input = "あhello₤";

    String result = CharMatcher.ASCII.retainFrom(input);
    assertEquals("hello", result);

    result = CharMatcher.inRange('0', 'z').retainFrom(input);
    assertEquals("hello", result);
}

3. Supprimer les caractères absents desCharset

Voyons maintenant comment supprimer les caractères qui n'appartiennent pas à unCharset donné. Dans l'exemple suivant, nous supprimerons les caractères qui n'appartiennent pas aux "cp437"Charset:

@Test
public void whenRemoveCharsNotInCharset_thenRemoved() {
    Charset charset = Charset.forName("cp437");
    CharsetEncoder encoder = charset.newEncoder();

    Predicate inRange = new Predicate() {
        @Override
        public boolean apply(Character c) {
            return encoder.canEncode(c);
        }
    };

    String result = CharMatcher.forPredicate(inRange)
                               .retainFrom("helloは");
    assertEquals("hello", result);
}

Remarque: Nous avons utiliséCharsetEncoder pour créer unPredicate qui vérifie si lesCharacter donnés peuvent être encodés enCharset donnés.

4. ValiderString

Ensuite, voyons comment valider unString en utilisantCharMatcher.

Nous pouvons utilisermatchesAllOf() pour vérifier si tous les caractères correspondent à une condition. Et nous pouvons utilisermatchesNoneOf() pour vérifier si une condition ne s'applique à aucun des caractèresString.

Dans l'exemple suivant, nous vérifions si notreString est en minuscule, contient au moins un caractère «e» et ne contient aucun chiffre:

@Test
public void whenValidateString_thenValid(){
    String input = "hello";

    boolean result = CharMatcher.JAVA_LOWER_CASE.matchesAllOf(input);
    assertTrue(result);

    result = CharMatcher.is('e').matchesAnyOf(input);
    assertTrue(result);

    result = CharMatcher.JAVA_DIGIT.matchesNoneOf(input);
    assertTrue(result);
}

5. CouperString

Voyons maintenant comment découper unString en utilisantCharMatcher.

Dans l'exemple suivant, nous utilisonstrimLeading(),trimTrailing ettrimFrom() pour couper nosString:

@Test
public void whenTrimString_thenTrimmed() {
    String input = "---hello,,,";

    String result = CharMatcher.is('-').trimLeadingFrom(input);
    assertEquals("hello,,,", result);

    result = CharMatcher.is(',').trimTrailingFrom(input);
    assertEquals("---hello", result);

    result = CharMatcher.anyOf("-,").trimFrom(input);
    assertEquals("hello", result);
}

6. Réduire unString

Ensuite, voyons comment réduire unString en utilisantCharMatcher.

Dans l'exemple suivant, nous utilisonscollapseFrom() pour remplacer les espaces consécutifs par «»:

@Test
public void whenCollapseFromString_thenCollapsed() {
    String input = "       hel    lo      ";

    String result = CharMatcher.is(' ').collapseFrom(input, '-');
    assertEquals("-hel-lo-", result);

    result = CharMatcher.is(' ').trimAndCollapseFrom(input, '-');
    assertEquals("hel-lo", result);
}

7. Remplacer à partir deString

Nous pouvons utiliserCharMatcher pour remplacer des caractères spécifiques d'unString comme dans l'exemple suivant:

@Test
public void whenReplaceFromString_thenReplaced() {
    String input = "apple-banana.";

    String result = CharMatcher.anyOf("-.").replaceFrom(input, '!');
    assertEquals("apple!banana!", result);

    result = CharMatcher.is('-').replaceFrom(input, " and ");
    assertEquals("apple and banana.", result);
}

8. Compter les occurrences de caractères

Enfin, voyons comment compter les occurrences de caractères en utilisantCharMatcher.

Dans l'exemple suivant, nous comptons les virgules et les caractères entre «a»: «h»:

@Test
public void whenCountCharInString_thenCorrect() {
    String input = "a, c, z, 1, 2";

    int result = CharMatcher.is(',').countIn(input);
    assertEquals(4, result);

    result = CharMatcher.inRange('a', 'h').countIn(input);
    assertEquals(2, result);
}

9. Conclusion

Dans cet article, nous avons illustré certaines des API les plus utiles et des exemples d'utilisation concrète de l'utilisation de Guava for Strings.