Java

[Java] StringUtils.hasText, isEmpty, isBlank 비교하기

김먼저 2022. 8. 5. 09:49

개발할 때 String 값이 null, "", whitespace 인지 체크해야할 경우가 있습니다.

 

Java에서는 위와 같은 값들을 걸러내는 여러가지 방법이 있지만

 

위 3개를 가장 많이들 찾아보고 사용해오셨을거라고 생각합니다.

 

그렇다면 위 3개는 어떤 차이점이 있을까??

 

간단하게 정리하자면,

 

isEmpty   →   "", null, whitespace 체크!  →   3개중 해당사항이 있다면 return true.

isBlank    →   "", null 체크!  →   2개중 해당사항이 있다면 return true.

hasText   →   "", null, whitespace 체크!  →   3개중 해당사항이 있다면 return true.

 

 

('그럼 isEmpty나 hasText를 사용하면 되겠군..!')

 

 

위 예제를 보면, 나머지 케이스는 isEmpty()와 isBlank()가 같지만,

 

 

마지막에 빈 공백이 있는 문자열을 체크하는 경우에는 두 메소드의 결과가 다릅니다.

 

 

 

 

1. isEmpty()

 

 

  • Java 6 이후에 추가된 메소드.
  • 문자열의 길이가 0인 경우에만, true 리턴.
  • 따라서 빈 공백인 경우, false 리턴.

 

 

(현재 isEmpty()는 Deprecated 되어서 사용하지 않는 것을 권장합니다.)

 

 

 

 

2. isBlank()

 

 

문자열이 비어 있거나, 빈 공백(white space)를 포함하고 있는 경우에 true를 리턴하기 때문에

위 케이스의 경우 true를 리턴합니다.

  • Java 11 이후에 추가된 메소드.
  • 문자열의 길이가 0인 경우   →   true 리턴.
  • 빈 공백으로만 이루어져 있는 경우  →   true 리턴.

 

 

isEmpty()와 isBlank()의 가장 큰 차이는 빈 공백(white space)을 어떻게 처리하는가 입니다.

 

 

 

 

3. hasText

 

 

파라미터가 문자열인지 확인해서 true/false를 리턴하는 메소드.

 

StringUtils.hasText(null)  →   false

StringUtils.hasText("")  →   false

StringUtils.hasText(" ")  →   false

StringUtils.hasText("test")  →   true

StringUtils.hasText("   test    ")  →   true

 

 

공백을 제외한 문자열이 있는지 없는지 체크하기에 유용해 보입니다.

 

 

StringUtils이라는 추상클래스에는 다양한 메서드들이 있으며,

 

 

hasText뿐만 아니라 hasLength, containsWhitespace 등 유용한 메서드들이 많습니다!