このクイックチュートリアルでは、Guavaの

CharMatcher

ユーティリティクラスについて説明します。


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

String


からASCII以外の文字を削除します

次の例のように、

CharMatcher

を使用して

String

からASCII以外の文字を削除することもできます。

@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<Character> inRange = new Predicate<Character>() {
        @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


を検証

次に、

CharMatcher

を使用して

String

を検証する方法を見てみましょう。


matchesAllOf()

を使用して、すべての文字が条件に一致するかどうかを確認できます。また、

matchesNoneOf()

を使用して、条件が

String

文字に適用されないかどうかを確認できます。

次の例では、

String

が小文字で、少なくとも1つの「

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


それでは、

CharMatcher

を使用して

String

をトリミングする方法を見てみましょう。

次の例では、

String

をトリミングするために

trimLeading()



trimTrailing

、および

trimFrom()

を使用します。

@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.

String


を折りたたむ

次に、

CharMatcher

を使用して

String

を折りたたむ方法を見てみましょう。

次の例では、

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

を使って文字の出現回数を数える方法を見てみましょう。

次の例では、




::

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結論

この記事では、Guava for Stringsを使用する上で有用なAPIと実際の使用例をいくつか説明しました。