JAVA/기타

Java - String(문자열) .isEmpty() vs .isBlank() 차이점

99C0RN 2022. 12. 15. 16:32


Java에서 String(문자열) 데이터를 다루다보면, 해당 데이터가 존재하는지 공백인지 체크하는 경우가 자주 있습니다. Java에서는 공백 문자열 체크를 위한 기본 메서드가 여러가지 존재하는데, 그 중 String 클래스 멤버 메서드인 .isEmpty()와 .isBlank() 각각 특징 및 차이점이 무엇인지 확인해보겠습니다.


.isEmpty()

// String.java
public final class String {

    public boolean isEmpty() {
        return value.length == 0;
    }
}
  • isEmpty()는 해당 문자열 객체의 길이를 체크하여 boolean 값을 리턴한다.
    문자열의 길이가 0인 경우, true 리턴
  • Java 6 이후 버전에서 사용 가능하다.

.isBlank()

// String.java
public final class String {

    public boolean isBlank() {
        return indexOfNonWhitespace() == length();
    }
}
  • isBlank()는 문자열이 비어 있거나, 빈 공백으로만 이루어져 있는지 체크하여 boolean 값을 리턴한다.
    문자열의 길이가 0이거나, 빈 공백("", "  ")으로만 이루어져있으면 true 리턴
  • Java 11 이후 버전에서 사용 가능하다.

차이점

public class Example {
    public static void main(String[] args) {
        // Given
        String case1 = "Hi";
        String case2 = "";
        String case3 = " ";

        // When
        boolean empty_case1 = case1.isEmpty();
        boolean empty_case2 = case2.isEmpty();
        boolean empty_case3 = case3.isEmpty();

        boolean blank_case1 = case1.isBlank();
        boolean blank_case2 = case2.isBlank();
        boolean blank_case3 = case3.isBlank();

        // Then
        System.out.println("empty_case1 = " + empty_case1);
        System.out.println("empty_case2 = " + empty_case2);
        System.out.println("empty_case3 = " + empty_case3);
        System.out.println();

        System.out.println("blank_case1 = " + blank_case1);
        System.out.println("blank_case2 = " + blank_case2);
        System.out.println("blank_case3 = " + blank_case3);
    }
}

 

// 위 예제 코드 실행 결과
empty_case1 = false	// case: "hi"
empty_case2 = true	// case: ""
empty_case3 = false	// case: " "

blank_case1 = false	// case: "hi"
blank_case2 = true	// case: ""
blank_case3 = true	// case: " "

위 예제 코드의 실행 결과와 같이 String 객체가 "  " 빈 공백을 여러개 포함하고 있는 경우 서로 다르게 처리한다는 점이 가장 큰 차이점이다.

문자열 내부 데이터가 전부 공백(스페이스)로 이루어져있는 데이터를 비어있다고 판단해야 된다면 .isBlank() 메서드를 사용하여 분기처리를 진행하면 될 것 같다.