출석 미션을 하다가 페어가 물어봤다.
"isBlank()과 isEmpty()의 차이가 뭐야?"
나는 그냥 단순히 blank는 스페이스 같은 임의의 공백도 다 잡아내고 isEmpty는 아무것도 입력하지 않으면 true라고 했는데
내가 생각해도 너무 대충 알고 있는 것 같아 제대로 공부할 필요성을 느꼈다.
사실 지금까지 대강 알고 해왔다는 것에 반성했다.
자 그럼 이제부터 자세히 알아보자!!
1. isEmpty()
문자열의 길이가 0이면 `ture`를 반환한다.
내부적으로 `isEmpty()`는 `String`객체의 텍스트를 나타내는 바이트 배열의 길이에 의존한다.
게다가 `isEmpty()`메서드는 텍스트가 비어 있는지 아닌지를 계산하기 위해 모든 유형의 문자를 계산한다.
따라서 빈 공백, 표, 줄바꿈 또는 바이트로 표현할 수 있는 모든 문자는 유효한 문자로 계산된다.
String str1 = "";
System.out.println(str1.isEmpty()); // true
❗️주의 : 공백 문자(스페이스, 탭 등)가 포함되어 있으면 길이가 0이 아니기 때문에 `false`를 반환한다.
@Test
public void givenString_whenCallIsEmpty_thenReturnCorrectValues() {
assertFalse("Example text".isEmpty()); // false
assertTrue("".isEmpty()); // true
assertFalse(" ".isEmpty()); // false
assertFalse("\t\n\r\f".isEmpty()); // false
}
2. isBlank()
자바 11부터 추가된 메서드입니다.
문자열이 비어있거나, 오직 공백 문자(스페이스, 탭, 줄바꿈 등)로만 이루어져 있으면 true를 반환한다.
자바에서 공백 문자로 간주되는 5개 문자는 \s(공백)와 \t, \n, \r, \f 이스케이프 시퀀스이다.
- `isLatin1()` : 문자열이 Latin-1(ISO-8859-1) 인코딩인지 확인하는 메서드
- `value` : String 클래스 내부에서 문자열 데이터를 저장하는 필드
- `StringLatin1.indexOfNonWhitespace(value)` : Latin-1 문자열에서 공백이 아닌 첫 번째 문자의 인덱스 반환
- `StringUTF16.indexOfNonWhitespace(value)` : UTF-16 문자열에서 공백이 아닌 첫 번째 문자의 인덱스 반환
❓ isBlank() 동작 원리
- `indexOfNonWhitespace()`가 문자열에서 처음으로 공백이 아닌 문자의 위치를 찾음
- Latin1 문자열이면 `StringLatin1.indexOfNonWhitespace(value)` 실행
- UTF-16 문자열이면 `StringUTF16.indexOfNonWhitespace(value)` 실행
- 이 값이 `length()`와 같다면 → 문자열이 공백 문자만 포함 또는 빈 문자열
- 따라서 `isBlank()`는 문자열이 비어 있거나 공백 문자만 포함된 경우 true를 반환
백그라운드에서 `isBlanck()`메서드는 첫 번째 비공백 문자의 인덱스를 검색한다.
비공백 문자가 없으면 해당 인덱스는 배열의 길이와 같다.
마지막으로 해당 인덱스를 바이트 배열의 길이와 비교하여 정답을 출력한다.
@Test
public void givenString_whenCallStringIsBlank_thenReturnCorrectValues() {
assertFalse("Example text".isBlank()); // // false
assertTrue("".isBlank()); // true
assertTrue(" ".isBlank()); // true
assertTrue("\t\n\r\f ".isBlank()); //true
assertTrue(" hi ".isBlank()); // false
}
첫 번째 줄은 적어도 하나의 공백이 아닌 문자를 포함하고 있기 때문에 공백이 아닌 것으로 간주\
✅ 정리
isBlank()는 일부 이스케이프 시퀀스와 같은 공백 문자에 대해 `true`를 반환하고 `isEmpty()`는 문자열에 문자가 하나도 없을 때만 `ture`를 반환합니다.
📚 Reference
'JAVA' 카테고리의 다른 글
Comparable 인터페이스 너 뭐야! (0) | 2025.02.26 |
---|