Guava CharMatcher

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.