Guava CharMatcher

Guava CharMatcher

В этом кратком руководстве мы рассмотрим служебный классCharMatcher в Guava.

1. Удалить специальные символы изString

Начнем с удаления всех специальных символов изString.

В следующем примере мы удаляем все символы, которые не являются цифрами или буквами, используяretainFrom():

@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. Удалить символы не ASCII из строки

Мы также можем использоватьCharMatcher для удаления символов, отличных от ASCII, изString, как в следующем примере:

@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. Удалить символы, не входящие вCharset

А теперь давайте посмотрим, как удалить персонажей, не принадлежащих данномуCharset. В следующем примере мы удалим символы, не принадлежащие к «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);
}

Примечание. Мы использовалиCharsetEncoder для созданияPredicate, который проверяет, можно ли заданныйCharacter закодировать в заданныйCharset.

4. ПроверитьString

Далее - давайте посмотрим, как проверитьString с помощьюCharMatcher.

Мы можем использоватьmatchesAllOf(), чтобы проверить, все ли символы соответствуют условию. И мы можем использоватьmatchesNoneOf(), чтобы проверить, не применяется ли условие ни к одному из символовString.

В следующем примере мы проверяем, является ли нашString строчными буквами, содержит ли хотя бы один символ «e» и не содержит ли никаких цифр:

@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. ОбрезкаString

А теперь давайте посмотрим, как обрезатьString с помощьюCharMatcher.

В следующем примере мы используемtrimLeading(),trimTrailing иtrimFrom(), чтобы обрезать нашString:

@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. Свернуть aString

Далее - давайте посмотрим, как свернутьString с помощьюCharMatcher.

В следующем примере мы используемcollapseFrom() для замены следующих друг за другом пробелов на «»:

@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. Заменить изString

Мы можем использоватьCharMatcher для замены определенных символов изString, как в следующем примере:

@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. Подсчет вхождений символов

Наконец, давайте посмотрим, как подсчитать появление символов с помощьюCharMatcher.

В следующем примере мы считаем запятые и символы между "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. Заключение

В этой статье мы проиллюстрировали некоторые из более полезных API и реальные примеры использования Guava для строк.