グアバチャーマッチャー
このクイックチュートリアルでは、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. 文字列から非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 inRange = new Predicate() {
@Override
public boolean apply(Character c) {
return encoder.canEncode(c);
}
};
String result = CharMatcher.forPredicate(inRange)
.retainFrom("helloは");
assertEquals("hello", result);
}
注:CharsetEncoderを使用して、指定されたCharacterを指定されたCharsetにエンコードできるかどうかをチェックするPredicateを作成しました。
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をトリミングする方法を見てみましょう。
次の例では、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. 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を使用して文字の出現をカウントする方法を見てみましょう。
次の例では、 ‘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. 結論
この記事では、Guava for Stringsを使用したより便利なAPIと実際の使用例を示しました。