JAVA/tips
abbreviate (줄여쓰기)를 정규표현식으로 구현해보기
hun.a
2022. 5. 3. 18:31
반응형
개인의 취향
입력받은 문자열이 너무 길 경우, 간혹 끝 부분을 ...
와 같이 줄여서 사용하기도 한다.
이 기능은 org.apache.commons.lang.StringUtils#abbreviate()에서 제공하고 있지만
저거 하나 쓰려고 라이브러리를 추가하기에는...
이부분은 개인의 취향이니 더 이상 언급하지 않겠다. ㅎ
패턴
먼저 정규표현식의 패턴을 알아야한다.
기본적인 사용법은 다른곳에 많이 소개가 되어 있으니 생략하고
우리는 패턴에 집중해보자.
우리가 사용할 패턴은 후방탐색(Lookbehind) 패턴이다.
후방탐색 패턴은 (?<=Y)X
와 같이 표현하며, Y를 뒤따르는 X를 탐색
한다는 의미이다.
원리는 간단하다. Y
패턴 뒤에 나올 X
를 찾으면 된다.
예를들면 ABCDEFGHIJ
문자열에서 5번째 뒤의 문자열들을 찾으려면? (?<=.{5}).+
로 하면 된다.
패턴에서 사용된 표현식들을 간단하게 설명하면,
.
은 모든 문자를 의미하며{5}
는 앞의 문자가 5번 반복된다는걸 의미한다.- 위의 3개를 연결해서
(?<=.{5})
패턴을 만들고, 이는 처음부터 5번째 문자열 뒤에 오는 문자들을 탐색한다는 의미가 된다. - 마지막으로
.+
를 통해 6번째 부터 마지막까지 문자들을 매칭하게 된다.
자 그럼 이걸 코드로 만들어보자.
코드
public static String abbreviate(String input, int size) {
if (input.length() <= size) {
return input;
}
String pattern = String.format("(?<=.{%d}).+", size - 3);
return input.replaceAll(pattern, "...");
}
input
과 size
두 개의 파라미터를 받아서 전체 길이가 size
보다 클 경우만 줄여쓰기를 수행한다.
즉, 아래 표와 같은 결과가 나온다.
input | size | 결과 |
---|---|---|
"0123456789" | 10 | "0123456789" |
"0123456789" | 9 | "012345..." |
"0123456789" | 8 | "01234..." |
단, 위의 코드는 한 줄로 표현된 문자열에 대해서만 정상 동작하므로
장문의 문장들을 줄이는데는 사용할 수 없다.
이부분은 추후에 다시 포스팅 하도록 하겠다.
끝~
반응형