DEV Community

dss99911
dss99911

Posted on • Originally published at dss99911.github.io

Java String 다루기 - 정규식, StringTokenizer, ReflectionToStringBuilder

Java String 다루기

Java에서 String을 효과적으로 다루는 여러 가지 방법을 살펴봅니다.

객체 필드를 문자열로 출력하기

디버깅이나 로깅 시 객체의 모든 필드 값을 보고 싶을 때 ReflectionToStringBuilder를 사용할 수 있습니다.

Maven 의존성 추가

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.4</version>
</dependency>
Enter fullscreen mode Exit fullscreen mode

사용 예시

ReflectionToStringBuilder.toString(user, ToStringStyle.MULTI_LINE_STYLE)
Enter fullscreen mode Exit fullscreen mode

출력 결과:

com.mms.mja.blog.demo.yaml.User@36d4b5c[
  name=Test User
  age=30
  address={line1=My Address Line 1, line2=Address line 2, city=Washington D.C., zip=20000}
  roles={User,Editor}
]
Enter fullscreen mode Exit fullscreen mode

정규식 그룹 (Regex Groups)

정규식에서 그룹을 사용하면 특정 패턴을 캡처하고 대체할 수 있습니다.

기본 사용법

String pattern = "(\\w)(\\s+)([\\.,])";
System.out.println(EXAMPLE_TEST.replaceAll(pattern, "$1$3"));
Enter fullscreen mode Exit fullscreen mode
  • $1, $2, $3은 각각 첫 번째, 두 번째, 세 번째 그룹을 참조합니다.

특수문자 이스케이프

searchValue = searchValue.replaceAll("([\\\\\\%\\_])", "\\\\$1");
Enter fullscreen mode Exit fullscreen mode

백슬래시, 퍼센트, 언더스코어와 같은 특수문자 앞에 백슬래시를 추가하는 예시입니다.

StringTokenizer

문자열을 특정 구분자(delimiter)로 나누어 토큰화할 수 있습니다.

생성자

StringTokenizer(String str, String delim)
Enter fullscreen mode Exit fullscreen mode
  • 기본 구분자는 공백(' ')입니다.

사용 예시

for (StringTokenizer stringTokenizer = new StringTokenizer("test test test");
     stringTokenizer.hasMoreTokens(); ) {
    String s = stringTokenizer.nextToken();
    System.out.println(s);
}
Enter fullscreen mode Exit fullscreen mode

출력:

test
test
test
Enter fullscreen mode Exit fullscreen mode

다른 구분자 사용

String nextToken(String delim)
Enter fullscreen mode Exit fullscreen mode

nextToken() 메서드에 구분자를 전달하여 동적으로 구분자를 변경할 수도 있습니다.

문자열 배열 조인

배열의 요소들을 특정 구분자로 연결하는 유틸리티 메서드:

public static String join(Object[] array, String delimiter) {
    if (array == null || array.length == 0) {
        return null;
    }
    if (delimiter == null) {
        delimiter = "";
    }
    StringBuilder b = new StringBuilder();
    for (int i = 0; i < array.length; i++) {
        b.append(String.valueOf(array[i]));
        if (i != array.length - 1) {
            b.append(delimiter);
        }
    }
    return b.toString();
}
Enter fullscreen mode Exit fullscreen mode

Java 8 이상에서는 String.join() 또는 Collectors.joining()을 사용할 수 있습니다:

// Java 8+
String result = String.join(", ", array);

// Stream 사용
String result = Arrays.stream(array)
    .map(String::valueOf)
    .collect(Collectors.joining(", "));
Enter fullscreen mode Exit fullscreen mode

참고

  • StringTokenizer는 레거시 클래스입니다. Java 8 이상에서는 String.split() 또는 Stream API 사용을 권장합니다.
  • 정규식 성능이 중요한 경우 Pattern.compile()을 사용하여 패턴을 미리 컴파일하세요.

Originally published at https://dss99911.github.io

Top comments (0)