In this quick tutorial weβll explore the CharMatcher utility class in Guava.
1. Remove Special Characters from a String
Letβs start by removing all special characters from a String.
In the following example, we remove all characters that arenβt digit or letter using retainFrom():
@Test
public void whenRemoveSpecialCharacters_thenRemoved(){
String input = "H*el.lo,}12";
CharMatcher matcher = CharMatcher.javaLetterOrDigit();
String result = matcher.retainFrom(input);
assertEquals("Hello12", result);
}
2. Remove Non ASCII Characters From String
We can also use CharMatcher to remove non ASCII characters from a String as in the following example:
@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. Remove Characters Not in the Charset
Now β letβs see how to remove Characters that donβt belong to a given Charset. In the following example β weβll remove characters that donβt belong to the β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);
}
Note: We used CharsetEncoder to create a Predicate that check if the given Character can be encoded to the given Charset.
4. Validate String
Next β letβs see how to validate a String using CharMatcher.
We can use matchesAllOf() to check if all characters match a condition. And we can make use of matchesNoneOf() to check if a condition doesnβt apply on any of the String characters.
In the following example, we check if our String is lowercase, contains at least one βeβ character and doesnβt contain any digits:
@Test
public void whenValidateString_thenValid(){
String input = "hello";
boolean result = CharMatcher.javaLowerCase().matchesAllOf(input);
assertTrue(result);
result = CharMatcher.is('e').matchesAnyOf(input);
assertTrue(result);
result = CharMatcher.javaDigit().matchesNoneOf(input);
assertTrue(result);
}
5. Trim String
Now β letβs see how trim a String using CharMatcher.
In the following example, we use trimLeading(), trimTrailing and trimFrom() to trim our 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. Collapse a String
Next β letβs see how to collapse a String using CharMatcher.
In the following example, we use collapseFrom() to replace consecutive spaces with βββ:
@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. Replace from String
We can use CharMatcher to replace specific characters from a String as in the following example:
@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. Count Character Occurrences
Finally β letβs see how to count the occurrences of characters using CharMatcher.
In the following example, we count the commas and characters between β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. Conclusion
In this article we illustrated some of the more useful APIs and real-world usage examples of using Guava for Strings.
