[java] 불규칙한 띄어쓰기 완벽하게 자르기: trim()과 split("\\s+")

CHOI HONGSEO·2026년 4월 11일

사용자가 입력한 데이터나 외부 파일을 읽어올 때, 띄어쓰기가 아주 예쁘게 한 칸씩만 되어있다면 얼마나 좋을까요? 하지만 현실은 그렇지 않습니다.

"  사과   바나나    포도 "

위 문자열처럼 맨 앞에 공백이 있거나, 단어 사이의 띄어쓰기 칸 수가 제멋대로인 문자열을 단순히 split(" ")으로 자르면 대참사가 발생합니다. 빈 문자열("")들이 배열에 불청객처럼 마구 끼어들기 때문이죠.

오늘은 이런 불규칙한 공백들을 단 한 줄의 코드로 완벽하게 제압하는 마법의 조합, trim()과 정규표현식([ ]+, \\s+)에 대해 파헤쳐 보겠습니다.


1단계: trim() - 앞뒤 쓰레기 공백 청소기

trim() 메서드는 문자열의 맨 앞(Leading)과 맨 뒤(Trailing)에 있는 의미 없는 공백들을 싹 지워주는 역할을 합니다. (단, 단어와 단어 '사이'에 있는 공백은 건드리지 않습니다.)

String text = "  안녕 하세요  ";
System.out.println(text.trim()); 
// 결과: "안녕 하세요"

split을 하기 전에 trim()을 써야 할까요?
자바의 split은 문자열 맨 앞에 구분자(공백)가 있으면, "어? 공백 앞에도 뭔가 글자가 있었나 본데?" 하고 착각하여 배열의 첫 번째 방에 빈 문자열("")을 집어넣는 고질적인 특징이 있습니다.
따라서 split을 하기 전에 .trim()으로 맨 앞뒤 공백을 방어막처럼 미리 깎아내 주는 것이 안전합니다.


2단계: split("[ ]+") - 스페이스바 마스터

앞뒤 공백을 잘라냈다면, 이제 단어 사이에 있는 '제멋대로인 띄어쓰기'를 하나의 칼날로 잘라낼 차례입니다. 이때 사용하는 것이 바로 정규표현식(Regex)입니다.

String text = "사과   바나나  포도";
String[] arr = text.split("[ ]+");
  • [ ] (대괄호): "이 안에 있는 글자를 찾아라!"라는 뜻입니다. 여기서는 스페이스바(공백) 한 칸이 들어있습니다.
  • + (더하기): 정규표현식의 핵심 기호로, "앞의 글자가 1번 이상 연속으로 무한히 나올 수 있다"는 뜻입니다.

즉, "[ ]+"의 진짜 의미는 "스페이스바가 1칸이든, 3칸이든, 10칸이든 상관없이 하나로 뭉뚱그려서 잘라내라!"가 됩니다. 이 코드를 쓰면 빈 문자열 없이 딱 3개의 과일만 배열에 예쁘게 담깁니다.


3단계: split("\\s+") - 모든 공백의 지배자 (종결자)

  • [ ]+도 훌륭하지만, 실무나 까다로운 코딩 테스트에서는 스페이스바 외에도 엔터(줄바꿈, \n)나 탭(Tab, \t) 키가 섞여 들어오는 경우가 아주 많습니다.
    이때 [ ]+는 오직 '스페이스바'만 잡을 수 있기 때문에 탭이나 엔터를 만나면 자르지 못하고 에러를 유발합니다.

이 모든 상황을 평정하는 끝판왕이 바로 \\s+ 입니다.

// 스페이스바, 탭(\t), 엔터(\n)가 대환장 파티를 벌이는 문자열
String text = "사과 \t 바나나 \n\n 포도";
String[] arr = text.split("\\s+");
  • \s (소문자 s): 스페이스바, 탭, 엔터 등 '눈에 보이지 않는 모든 종류의 공백(Whitespace)'을 의미하는 정규표현식 특수기호입니다. (자바에서는 역슬래시를 표현하기 위해 \\s로 두 번 적어줍니다.)
  • + (더하기): 역시 1번 이상 연속됨을 의미합니다.

즉, split("\\s+")는 "스페이스바든, 탭이든, 줄바꿈이든 섞여서 몇 칸이 있든 전부 다 하나의 공백으로 취급해서 잘라버려라!"라는 무적의 코드가 됩니다.


최종 요약 (이것만 기억하세요!)

  • split(" "): 띄어쓰기가 무조건 딱 1칸씩만 있을 때 쓴다.
  • trim().split("[ ]+"): 스페이스바 띄어쓰기가 여러 칸으로 불규칙할 때 쓴다.
  • trim().split("\\s+"): 스페이스바, 탭, 엔터 등 모든 종류의 공백이 섞여 있을 때 쓰는 가장 완벽한 마법의 1줄 코드!
profile
곧 성공할 개발자입니다.

0개의 댓글