Java String 다루기

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

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

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

Maven 의존성 추가

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.4</version>
</dependency>

사용 예시

ReflectionToStringBuilder.toString(user, ToStringStyle.MULTI_LINE_STYLE)

출력 결과:

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}
]

정규식 그룹 (Regex Groups)

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

기본 사용법

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

특수문자 이스케이프

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

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

StringTokenizer

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

생성자

StringTokenizer(String str, String delim)
  • 기본 구분자는 공백(‘ ‘)입니다.

사용 예시

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

출력:

test
test
test

다른 구분자 사용

String nextToken(String delim)

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();
}

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(", "));

참고

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