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.