HOWTO · Java

Java의 trim() 대 strip()

이 자습서에서는 Java에서 trim() 및 strip() 메서드의 차이점을 보여줍니다.

이 페이지의 내용

Java에서 String.trim()와 String.strip()는 모두 문자열의 처음과 끝에서 조건에 맞는 문자를 제거하며, 중간에 있는 문자는 바꾸지 않습니다. 차이는 어떤 문자를 조건에 맞는 것으로 판단하는지에 있습니다. 기존 규칙이 필요하면 trim()를 사용하고, Java 11 이상을 사용할 수 있으며 입력에 Character.isWhitespace(int) 규칙이 적합하면 strip()를 사용하세요.

Java의 trim()와 strip() 한눈에 보기

항목 trim() strip()
사용 가능 버전 Java 1.0부터 Java 11부터
문자 판정 규칙 코드 포인트가 U+0020 이하인 처음과 끝의 문자를 제거 Character.isWhitespace(int)가 true를 반환하는 처음과 끝의 문자를 제거
선언된 위치 String String
문자열 중간의 문자 변경하지 않음 변경하지 않음

두 메서드는 조건에 맞는 양쪽 끝 문자를 제거한 문자열을 반환합니다. 예를 들어 문자열의 시작과 끝에 있는 일반 공백은 두 메서드 모두 제거하지만, 단어 사이의 공백은 그대로 둡니다. 핵심 차이는 한 메서드가 모든 유니코드 공백을 처리한다는 데 있지 않습니다. 각 메서드는 특정 문자 판정 규칙을 사용합니다.

trim()와 strip()의 공백 처리 방식

trim()는 처음이나 끝에 있는 문자 중 숫자 코드 포인트가 U+0020 이하인 문자를 제거합니다. 여기에는 일반 공백 U+0020, 탭, 캐리지 리턴이 포함됩니다. 이 메서드는 유니코드의 일반적인 공백 분류를 사용하지 않습니다. 이 범위를 벗어나는 U+2005 같은 문자는 trim()를 적용한 뒤에도 끝에 남습니다.

strip()는 Character.isWhitespace(int)로 문자를 판정합니다. 이 규칙에는 U+0020 범위 밖의 공백 문자도 다수 포함되며, U+2005와 U+2001이 그 예입니다. 하지만 모든 유니코드 공백 분리 문자를 포함하지는 않습니다. 특히 이 규칙으로는 줄 바꿈 없는 공백인 U+00A0을 strip()가 제거하지 않습니다. 따라서 strip()를 모든 유니코드 공백을 정리하는 범용 작업으로 간주해서는 안 됩니다.

두 메서드 모두 양쪽 끝에 있는 조건에 맞는 문자만 제거합니다. 공백이 아닌 문자 사이에 있는 탭이나 공백은 문자열에 그대로 남습니다.

Java 버전 및 API 세부 정보

trim()는 Java 1.0부터 String에서 사용할 수 있습니다. strip()는 Java 11에서 String에 추가되었으므로, 이를 사용하는 코드에는 Java 11 이상 API가 필요합니다. strip()는 String 메서드이며 CharSequence 인터페이스에 선언되어 있지 않습니다. Java String API에서 두 메서드를 설명하고, Java Character.isWhitespace(int) API에서 strip()가 사용하는 문자 판정 함수를 정의합니다. 애플리케이션을 이전 Java API에 맞춰 컴파일해야 한다면 trim()를 사용하거나, 애플리케이션에 필요한 정확한 문자 정책을 구현하세요.

Java 예제로 두 메서드 비교하기

이 예제는 Java 11 이상에서 실행합니다. 일반 공백, 탭과 캐리지 리턴, U+2005, U+2001, 줄 바꿈 없는 공백인 U+00A0에 대한 결과를 비교합니다. 테스트할 코드 포인트를 명확히 하기 위해 소스에서 유니코드 이스케이프를 사용합니다.

이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.

public class TrimVsStrip {
    public static void main(String[] args) {
        String[] samples = {
            " www.delftstack.com ",
            "\t www.delftstack.com \r",
            "www.delftstack.com \u2005",
            "\u2001",
            "\u00A0"
        };

        for (String sample : samples) {
            System.out.println(sample.trim().equals(sample.strip()));
        }
    }
}
true
true
false
false
true

출력은 위 샘플과 같은 순서로 각 문자열에 trim()와 strip()를 적용한 결과를 비교합니다. 앞의 두 결과가 true인 이유는 두 메서드 모두 문자열 끝의 일반 공백, 탭, 캐리지 리턴을 제거하기 때문입니다. 다음 두 결과는 false입니다. strip()는 Character.isWhitespace(int) 규칙에 따라 U+2005와 U+2001을 제거하지만, trim()는 이 문자들을 남깁니다. 마지막 결과가 true인 이유는 두 메서드 모두 줄 바꿈 없는 공백인 U+00A0을 제거하지 않기 때문입니다. U+2001 샘플에는 해당 문자만 있으므로 trim()를 적용하면 비어 있지 않은 문자열이 남고, strip()를 적용하면 빈 문자열이 반환됩니다.

적절한 메서드 선택하기

Java 11 이상을 사용할 수 있고 애플리케이션에서 제거할 문자에 Character.isWhitespace(int) 규칙이 맞는다면 strip()를 선택하세요. U+0020 이하를 대상으로 하는 더 제한적인 규칙이 필요하거나 이전 Java 버전과의 호환성이 필요하다면 trim()를 선택하세요. 입력 정책에 줄 바꿈 없는 공백 같은 문자를 포함해야 한다면 해당 정책을 명시적으로 정의하고 적용하세요. 어느 메서드도 모든 유니코드 공백 문자를 처리한다고 가정해서는 안 됩니다.