공백 제거의 필요성

자바로 웹개발을 하다 보면, 입력값에 들어온 공백(White space)을 제거해야 할 일이 심심치 않게 있습니다. 특히, UTF-8에는 다음과 같은 다양한 공백이 있기 때문에 모든 경우의 수에 대응해야 합니다.

U+0020 : 일반 스페이스
U+0009 : 탭(\t)
U+000A : 줄 바꿈(\n)
U+000D : 캐리지 리턴(\r)
U+000C : 폼 피드(\f)
U+3000 : 넓은 공백

공백 제거하기

String.trim()

JDK 1.0부터 존재한 역사가 있는 메서드로, 문자열 앞뒤의 아스키 공백1을 내부 char배열에서 제거합니다.

문자열 가운데는 제거하지 않으며, 나머지 유니코드 공백도 제거하지 않습니다.

  • 사용법

    public class TrimExample {
        public static void main(String[] args) {
            String str = "   Hello, Java!   ";
            System.out.println("Before trim: [" + str + "]");
            System.out.println("After trim: [" + str.trim() + "]");
        }
    }
    
    /*
    * [결과]
    * Before trim: [ Hello, Java! ]
    * After trim: [Hello, Java!]
    */
    

String.strip()

Java11에서 등장한 메서드로, trim()메서드와 다르게 문자열 앞뒤의 모든 유니코드 공백을 제거합니다.

모든 유니코드 공백을 제거하는 정규 표현식인 \\s를 사용합니다.

  • 사용법
public class StripExample {
    public static void main(String[] args) {
        String str = "\u2003Hello, Java!\u3000"; // 유니코드 공백 포함
        System.out.println("Before strip: [" + str + "]");
        System.out.println("After strip: [" + str.strip() + "]");
    }
}

/*
 * [결과]
 * Before strip: [ Hello, Java! ]
 * After strip: [Hello, Java!]
 */

String.replaceAll()

정규표현식을 직접 사용해서 공백을 제거할 수 있습니다. 다만, trim()이나 strip()과는 다르게 전체 문자열에서 공백을 제거합니다.

  • 사용법
public class replaceAllExample {
    public static void main(String[] args) {
        String str = "안 녕 하 세 요   \t  여 기 는 UTF-8  공 백 입니다!   \u3000";
        System.out.println("Before replace: [" + str + "]");
        System.out.println("After replace: [" + str.replaceAll("\\s+", "") + "]");
    }
}

/*
 * [결과]
 * Before replace: ["안 녕 하 세 요   \t  여 기 는 UTF-8  공 백 입니다!       ]
 * After replace: [안녕하세요여기는UTF-8공백입니다!]
 */

References

URL게시일자방문일자작성자
String.trim()-2024.11.16.Oracle
String.strip()-2024.11.16.Oracle
String.replaceAll()-2024.11.16.Oracle

  1. 일반 스페이스(U+0020)를 뜻합니다. ↩︎