미팀- 수정.

희운·2025년 12월 5일

split() 사용하기

우테코 프리코스 2주차를 다시 구현중
테스트 코드를 작성했다.


  public void validate(String carNames) {

        for (String name : carNames.split(DELIMITER)) {
            if (name.isBlank()) {
                throw new IllegalArgumentException("[ERROR] 쉼표를 기준으로 자동차 이름을 입력해주세요.");
            }
        }
    }

여기서 carNames 가 pobi,heeun 과 같이 들어온다.
만약에 "pobi,heeun," 과 같이 존재할 경우 split(,) 을 하면
"pobi" , "heeun" 으로만 분리한다.
내 의도는 마지막에 "" 공백도 결과배열에 포함되어야 한다.
하지만 포함되지 않는다.

또한 "pobi,heeun,bugati,," 이런 경우에도
pobi , heeun, bugati 이 세개의 문자열만 문자열 배열에 저장된다.

정리하면 다음과 같다

입력split 결과(default)empty 검증 가능?
pobi,,pobi["pobi", "", "pobi"]✔ 가능
pobi,,"["pobi"]❌ 마지막 empty 제거됨 → 검증 불가
pobi, ["pobi", " "]❌ 공백 " " 은 empty 아님
,pobi["", "pobi"]✔ 가능
pobi,heeun,,["pobi", "heeun"]❌ 마지막 둘 다 제거됨

왜 이런 결과가 나올까 ?

한가지만 기억하자

결과 배열의 “맨 뒤에 있는 빈 문자열은 모두 제거한다.”

아니 그럼 나는 뒤에 공백 즉 "" 이 배열에 포함되어야 검증을 하는데...?

방법이 있다.

split("", -1) 이렇게 하면 된다...!

수정된 코드는 다음과 같다

 public void validate(String carNames) {

        for (String name : carNames.split(DELIMITER, -1)) {
            if (name.isBlank()) {
                throw new IllegalArgumentException("[ERROR] 쉼표를 기준으로 자동차 이름을 입력해주세요.");
            }
        }
    }
    

뒤에 -1 을 넣으면

빈 문자열도 배열에 넣어준다.

빈 문자열 포함해서 모든 조각 유지된다

하나더 위에 보면 name.isBlank() 가 있다.

name.isBlank() 에서는 "" , " " 가 모두 참이다

name.isEmpty()"" 만 참이다.

그럼 무엇을 많이 쓸까?

당연히 name.isBlank() 이겠지?

profile
기록하는 공간

0개의 댓글