안녕하세여 알렉습니다!
우테코 자동차 경주 미션을 진행하는데 다음같은 요구사항이 있었어요
자동차 이름은 쉼표(,)를 기준으로 구분하며 이름은 5자 이하만 가능하다.
예시) pobi,crong,honux
이런식으로 입력이 들어옵니다. 이걸 나눠서 각각 자동차 객체를 생성해줘야하는데,
당연히 문자열을 나누는 String.split() API를 사용하고 delimiter로 ","를 지정하면 되겠구나 생각했죠.
물론 잘린 문자열은 각각 검증 과정을 거치도록 구현을 했습니다.
그런데...
빈 문자열이 들어오면 에러메시지를 출력하면서 재입력을 받아야하는데요...
",,"이렇게 문자열이 들어오면 그냥 넘어가버리는게 아니겠어요?🤔
아 보니까 String.split() 메서드는 기본적으로 빈 문자열은 반환 요소에 포함시키지 않더라구요..
즉 검증할 요소에 포함되고 있지 않던거죠... 참고
해결 방법은, 오버로드 된
요 메서드에 두 번째 파라미터 값에 -1을 주면 빈 문자열도 반환 요소에 포함돼서 반환 됩니다.
그런데 이상하죠. 저 시그니처는 두 번째 파라미터가 요소 갯수를 뜻하는 걸로 알고 있어서요
정말 이러고싶진 않았지만 코드 한번 까봤습니다.
이렇게 되어있네요.. 역시 한 눈에 알아보기 쉽진 않았지만 ㅋㅋ
그냥 limit를 음수를 주면 모든 요소를 다 리스트에 포함시켜서 반환하도록, 양수가 들어오면 해당 갯수만 반환하도록 되어있어요. 굳이 -1이 아니어도 되고 그냥 음수면 되는거였습니다.
그래서 핵심만 정리하면!
String str = "a,b,,c";
String[] includeEmpty = str.split(",", -1); // ["a", "b", "", "c"]
String[] excludeEmpty = str.split(","); // ["a", "b", "c"]
이렇게 동작한다는 겁니다 😁
'Java' 카테고리의 다른 글
Collections.unmodifiableXX()는 방어적 복사가 아니다 (1) | 2022.03.06 |
---|---|
Collection의 깊은 복사와 방어적 복사 (2) | 2022.03.05 |
추상 클래스와 인터페이스의 용도 차이 (0) | 2022.03.03 |
생성자에 매개변수가 많아도 안무섭게 해주는 Builder! (0) | 2022.02.28 |
IntelliJ(인텔리제이) 커스텀 자동완성 템플릿 만들기 - Live Template (2) | 2022.02.18 |