Guava CharMatcher
Neste tutorial rápido, exploraremos a classe de utilitárioCharMatcher no Guava.
1. Remova caracteres especiais de umString
Vamos começar removendo todos os caracteres especiais de umString.
No exemplo a seguir, removemos todos os caracteres que não são dígitos ou letras usandoretainFrom():
@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. Remover caracteres não ASCII da string
Também podemos usarCharMatcher para remover caracteres não ASCII de umString como no exemplo a seguir:
@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. Remova os caracteres que não estão noCharset
Agora - vamos ver como remover caracteres que não pertencem a um determinadoCharset. No exemplo a seguir - removeremos os caracteres que não pertencem a “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);
}
Nota: UsamosCharsetEncoder para criar umPredicate que verifica se oCharacter fornecido pode ser codificado para oCharset fornecido.
4. ValidarString
A seguir - vamos ver como validarString usandoCharMatcher.
Podemos usarmatchesAllOf() para verificar se todos os caracteres correspondem a uma condição. E podemos usarmatchesNoneOf() para verificar se uma condição não se aplica a qualquer um dos caracteresString.
No exemplo a seguir, verificamos se nossoString está em minúsculas, contém pelo menos um caractere ‘e’ e não contém nenhum dígito:
@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. CortarString
Agora - vamos ver como cortar aString usandoCharMatcher.
No exemplo a seguir, usamostrimLeading(),trimTrailingetrimFrom() para cortar nossoString:
@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. Recolher umString
A seguir - vamos ver como recolher umString usandoCharMatcher.
No exemplo a seguir, usamoscollapseFrom() para substituir espaços consecutivos por ‘–’:
@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. Substitua deString
Podemos usarCharMatcher para substituir caracteres específicos deString como no exemplo a seguir:
@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. Contar ocorrências de caracteres
Finalmente - vamos ver como contar as ocorrências de caracteres usandoCharMatcher.
No exemplo a seguir, contamos as vírgulas e caracteres 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. Conclusão
Neste artigo, ilustramos algumas das APIs mais úteis e exemplos de uso no mundo real do uso do Guava for Strings.