グアバCharMatcher
このクイックチュートリアルでは、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と実際の使用例をいくつか説明しました。