우테코 프리코스 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() 이겠지?