-
abbreviate (줄여쓰기)를 정규표현식으로 구현해보기JAVA/tips 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..." 단, 위의 코드는 한 줄로 표현된 문자열에 대해서만 정상 동작하므로
장문의 문장들을 줄이는데는 사용할 수 없다.
이부분은 추후에 다시 포스팅 하도록 하겠다.끝~
반응형'JAVA > tips' 카테고리의 다른 글
How to use Redis 5.0.14 in embedded-redis (0) 2021.11.25 CGLIB Proxy 와 Mockito 콜라보레이션 (feat. Not a Mock) (0) 2020.07.10 RCP에서 AbstractUIPlugin 구현 클래스 자동으로 activate 설정 (0) 2017.10.18 How to logging in plugin development (0) 2016.05.12