구아바 CharMatcher
1. 문자열에서 특수 문자 제거
String에서 모든 특수 문자를 제거한다.
다음 예제에서 keepFrom()을 사용하여 숫자나 문자가 아닌 모든 문자를 제거한다.
1
2
3
4
5
6
7
8
@Test
public void whenRemoveSpecialCharacters_thenRemoved(){
String input = "H*el.lo,}12";
CharMatcher matcher = CharMatcher.javaLetterOrDigit();
String result = matcher.retainFrom(input);
assertEquals("Hello12", result);
}
2. 문자열에서 비 ASCII 문자 제거
다음 예제와 같이 CharMatcher를 사용하여 문자열에서 ASCII가 아닌 문자를 제거 할 수도 있다.
1
2
3
4
5
6
7
8
9
10
@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에 속하지 않는 문자를 제거하는 방법이다. 다음 예에서는 “cp437” Charset에 속하지 않는 문자를 제거한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@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를 사용 하여 주어진 Character가 주어진 Charset으로 인코딩될 수 있는지 확인 하는 Predicate를 생성했다.
4. 문자열 유효성 검사
CharMatcher를 사용하여 문자열을 검증하는 방법이다.
모든 문자가 조건과 일치하는지 확인하기 위해 matchAllOf()를 사용할 수 있다. 그리고 문자열 문자에 조건이 적용되지 않는지 확인하기 위해 matchNoneOf()를 사용할 수 있다.
다음 예에서는 String이 소문자인지, ‘e’ 문자가 하나 이상 포함되어 있고 숫자가 포함되어 있지 않은지 확인한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
@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. 문자열 자르기
CharMatcher를 사용하여 String을 trim하는 방법이다.
다음 예제에서는 trimLeading(), trimTrailing 및 trimFrom()을 사용하여 String을 trim한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
@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. 문자열 축소
CharMatcher를 사용하여 String을 축소하는 방법이다.
다음 예에서 접힌 공백을 ‘–’로 바꾸기 위해 collapseFrom()를 사용한다.
1
2
3
4
5
6
7
8
9
10
@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. 문자열에서 바꾸기
다음 예제와 같이 CharMatcher를 사용하여 문자열의 특정 문자를 바꿀 수 있다.
1
2
3
4
5
6
7
8
9
10
@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'
사이의 쉼표와 문자를 계산한다.
1
2
3
4
5
6
7
8
9
10
@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);
}
[출처 및 참고]
This post is licensed under CC BY 4.0 by the author.