java.lang.String 클래스에는 비어 있는 문자열인지 체크하는 두 개의 메소드가 있습니다.
isEmpty() / isBlank() 두 메소드는 무엇이 다를까? 그 차이점을 알아보겠습니다.
1. isEmpty()
- JAVA 6 이후에 추가된 메소드 입니다.
- 문자열의 길이가 0인 경우에, true를 리턴합니다.
- 내부적으로 구현은 String의
length
가 0인지 체크하는 방식으로 되어 있습니다.
public boolean isEmpty() {
return value.length == 0;
}
2. isBlank()
- JAVA 11 이후의 버전에서 사용 가능합니다.
- 문자열이 비어 있거나, 빈 공백으로만 이루어져 있으면, true를 리턴합니다.
- 내부적으로는 WhiteSpace 아닌 첫 번째 인덱스와 전체 길이가 같은지 체크합니다.
public boolean isBlank() {
return indexOfNonWhitespace() == length();
}
테스트 코드 구현
- Junit 5을 활용하여 Java 11 버전에서 테스트를 수행하였습니다.
- Test 환경이 없으신 분은 System.out.println 메소드를 사용해서 테스트 하시면 됩니다.
System.out.println("Hello".isEmpty());
// isEmpty와 isBlank 메소드 둘 다 성공한 테스트입니다.
@Test
void isEmpty(){
assertEquals("Hello".isEmpty(), false);
assertEquals("Hello ".isEmpty(), false);
assertEquals("".isEmpty(), true);
assertEquals(" ".isEmpty(), false);
assertEquals("\n\t".isEmpty(), false);
}
@Test
void isBlank(){
assertEquals("Hello".isBlank(), false);
assertEquals("Hello ".isBlank(), false);
assertEquals("".isBlank(), true);
assertEquals(" ".isBlank(), true);
assertEquals("\n\t".isBlank(), true);
}
정리
위의 테스트 코드를 보면, 나머지 케이스는 isEmpty()와 isBlank()가 같지만,
마지막에 " ", "\n", "\t"
와 같은 공백이 있는 문자열을 체크하는 경우에는 두 메소드의 결과가 다릅니다.
isEmpty()는 문자열의 길이를 체크하여, 문자열의 길이가 0인 경우에만 true를 리턴하기 때문에 빈 공백이 들어있는 문자열은 false를 리턴합니다.
isBlank()는 문자열이 비어 있는 경우와 공백(white space)를 포함하고 있는 경우 모두 true를 리턴합니다.
끝으로, isBlank()는 Java 11 버전에 추가되었기 때문에 Java 11 버전과 그 이후 버전에서만 사용 가능합니다.
참고
- Java String 공식 사이트
- https://hianna.tistory.com/531
'Java' 카테고리의 다른 글
Gradle 로 Junit 5 테스트 할 수 있도록 빌드 하기 (0) | 2021.10.26 |
---|---|
Java에서 큰 수 다루기 (BigInteger) (0) | 2021.08.05 |
Java Packages & API 사용하기 (0) | 2021.07.06 |
Java tutorial (0) | 2021.07.02 |