원본 글: https://www.baeldung.com/java-string-isempty-vs-isblank
이 글에서는 blank, empty인 상태의 String 객체를 isEmpty()함수와 isBlank()함수로 검증하는 법을 학습합니다.
그리고 두 함수의 차이를 학습합니다.
1. Glancing at String.isEmpty()
isEmpty()함수는 인자로 들어온 String값이 empty상태이면 true를, 아니면 false를 리턴합니다.
이 함수는 byte 배열길이로 판단하고, 모든 유형의 문자 갯수를 계산하여 문자열이 비어있는지 확인합니다.
그렇기에 공백, 줄바꿈, 등 바이트로 표현되는 어떤 문자든 유효한 값이라고 판단합니다.
@Test
public void isEmpty_test() {
Assertions.assertFalse("Empty string".isEmpty());
Assertions.assertTrue("".isEmpty());
Assertions.assertFalse(" ".isEmpty());
Assertions.assertFalse("\t\n\r\f".isEmpty());
}
첫번째 줄은 당연히 문자열을 포함하고 있기에 False가 리턴됩니다.
두번째 줄은 어떠한 문자를 포함하고 있지 않기에 True가 리턴됩니다.
세번째 줄과 네번째 줄은 공백이나 escape 문자를 포함하고 있기에 False가 리턴됩니다.
2. Looking at Java 11's String.isBlank()
isBlank() 함수는 Java11에 도입되었습니다. isEmpty()함수와 비슷하게 동작하지만 공백(\s, \t, \n, \r, 등)이 들어있어도 String이 비어있다고 판단합니다.
isBlank() 함수는 공백이 아닌 첫 문자를 찾고 만약 그 문자가 존재하면 그 배열의 길이와 비교하여 판단합니다. 공백이 없으면 문자열의 길이와 문자를 찾을때 사용한 인덱스의 정보가 같아야할겁니다. 마지막으로 해당 인덱스와 바이트 길이를 비교하여 판단합니다.
@Test
public void isBlank_test() {
Assertions.assertFalse("Empty string".isBlank());
Assertions.assertTrue("".isBlank());
Assertions.assertTrue(" ".isBlank());
Assertions.assertTrue("\t\n\r\f".isBlank());
}
2번째, 3번째, 4번째줄이 이전 테스트와 다르게 공백을 포함하고 있는경우에도 모두 True로 리턴됨을 확인할 수 있습니다.
특이 4번째줄은 escape 문자만 가지고 있음에도 isBlank()는 True를 리턴함을 볼 수 있습니다.
3. Comparing isBlank() vs. isEmpty()
요약하자면 isEmpty()는 String객체에 그 어떤 문자도 들어가있지 않은 상태를 검증하고, isBlank()는 어떤 문자도 들어가 있지 않거나, 문자열이 공백으로 되어있는 경우를 검증합니다.
Java11 이전 버전에서는 이를 검증하려면 String.trim()함수와 혼합하여 썼습니다. 하지만 Java11 이후에는 String.isBlank()함수가 이를 대체하고 있습니다.
4. 결론
isBlank()와 isEmpty()의 차이를 학습하였습니다.
isBlank()는 escape 문자와 같은 공백이 있어도 True를 리턴하는 반면, isEmpty()는 그 어떤 문자도 문자열에 포함되지 않아야 True를 리턴함을 알 수 있었습니다.
'Baeldung번역&공부 > Java-string' 카테고리의 다른 글
문자열에서 문자세는 여러 방법(Count Occurrences of a Char in a String) (0) | 2025.02.13 |
---|---|
랜덤한 문자열을 생성하는 방법(Generate Random String) (0) | 2025.02.11 |
문자열 리스트를 문자열로 바꾸는 방법(Convert a Comma Separated String to a List in Java) (0) | 2025.02.09 |
공백을 지우는 여러 방법들(Remove Whitespace From a String in Java) (0) | 2025.02.07 |
첫 문자를 대문자로 바꾸는 방법(Capitalize the First Letter of a String in Java) (0) | 2025.02.06 |