1. 문자열 길이 확인( length() )
String 클래스의 length() 메소드를 이용하여 문자열의 길이를 확인하여 비어있는 문자열인지 확인할 수 있습니다.
String test1 = "HELLO";
String test2 = "";
// 길이가 0 초과일 경우 값이 있는 것으로 판단하여 true 반환
boolean test1Check = (test1.length() > 0) ? true : false;
boolean test2Check = (test2.length() > 0) ? true : false;
System.out.println(test1Check); // true (값이 존재)
System.out.println(test2Check); // false (값이 존재하지 않음)
그러나 문제가 있습니다. 공백만 있는 경우에도 문자열 값이 존재한다고 판단합니다.
String test3 = " ";
boolean test3Check = (test3.length() > 0) ? true : false;
System.out.println(test3Check); // true (공백 데이터가 있는 것도 값으로 간주)
따라서 trim() 메소드를 활용하여 공백을 제거해 준 후 확인할 수 있습니다.
String test3 = " ";
boolean test3Check = (test3.trim().length() > 0) ? true : false;
System.out.println(test3Check); // false
2. 문자열이 비어있는지 확인( isEmpty(), isBlank() )
String 클래스의 isEmpty(), isBlack() 메소드를 활용하여 1번 예제보다 더 간단하게 확인할 수도 있습니다.
두 메소드 모두 문자열이 비어있는지 확인하는 메소드이며 차이는 다음과 같습니다.
public boolean isEmpty()
: 문자열의 길이가 0이면 true 아니면 false
public boolean isBlank()
: 문자열이 비어 있거나, 빈 공백으로만 이루어져 있으면, true를 리턴
: Java 11
[String 클래스]
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence {
public boolean isEmpty() {
return value.length == 0;
}
public boolean isBlank() {
return indexOfNonWhitespace() == length();
}
}
[예시]
String test1 = "HELLO";
String test2 = "";
String test3 = " ";
System.out.println("==isEmpty()==");
System.out.println(test1.isEmpty()); // false
System.out.println(test2.isEmpty()); // true
System.out.println(test3.isEmpty()); // false (길이로 체크하기 때문에 값이 있다고 판단합니다.)
System.out.println("==isBlank()==");
System.out.println(test1.isBlank()); // false
System.out.println(test2.isBlank()); // true
System.out.println(test3.isBlank()); // true
3. 문자열이 비어있거나 NULL인 경우 확인
위의 1번, 2번 예시를 통하여 문자열이 단순히 비어있는지는 확인할 수 있었지만 실제 실무에서는 String 클래스의 참조 변수가 Null을 참조하고 있는 상황을 자주 만나게 됩니다. 이 또한 문자열이 비어있다고 볼 수 있으므로 추가적으로 Null 확인도 필요합니다.
Null을 가지고 있는 String 클래스에 문자열 값이 비어있는지 length(), isEmpty(), isBlank() 메소드를 사용하게 되면 다음과 같이 NullPointerException이 발생하게 됩니다.
String test4 = null;
try {
System.out.println(test4.isBlank());
} catch (NullPointerException e) {
System.out.println("NullPointerException");
}
이를 해결하기 위하여 다음과 같이 직접 구현할 수도 있습니다.
(NULL을 참조하고 있을 경우에도 값이 비어있는 것으로 판단)
String test1 = "HELLO";
String test2 = "";
String test3 = " ";
String test4 = null;
// null이 아니고 비어있지 않는 경우에 true
boolean test1Check = (test1 != null && !test1.isBlank()) ? true : false;
boolean test2Check = (test2 != null && !test2.isBlank()) ? true : false;
boolean test3Check = (test3 != null && !test3.isBlank()) ? true : false;
boolean test4Check = (test4 != null && !test4.isBlank()) ? true : false;
System.out.println(test1Check); // true
System.out.println(test2Check); // false
System.out.println(test3Check); // false
System.out.println(test4Check); // false (에러 발생하지 않음)
또는 다음과 같이 StringUtils 클래스의 hasText() 메소드를 활용하여 더 간단하게 값이 비어있는지 확인할 수도 있습니다.
(과거에는 isEmpty() 메소드를 활용하였으나 Deprecated 되어서 사용하지 않는 것을 권장합니다.)
[StringUtils 클래스]
public abstract class StringUtils {
@Deprecated
public static boolean isEmpty(@Nullable Object str) {
return str == null || "".equals(str);
}
public static boolean hasText(@Nullable CharSequence str) {
return str != null && str.length() > 0 && containsText(str);
}
public static boolean hasText(@Nullable String str) {
return str != null && !str.isEmpty() && containsText(str);
}
}
[예시]
String test1 = "HELLO";
String test2 = "";
String test3 = " ";
String test4 = null;
System.out.println(StringUtils.hasText(test1)); // true
System.out.println(StringUtils.hasText(test2)); // false
System.out.println(StringUtils.hasText(test3)); // false
System.out.println(StringUtils.hasText(test4)); // false
'Backend > Java' 카테고리의 다른 글
[Java] 특정 문자로 시작하거나 끝나는지 확인하기(startsWith, endsWith) (0) | 2022.05.05 |
---|---|
[Java] 문자열의 공백 제거하기(trim, strip, replace) (0) | 2022.05.04 |
[Java] 문자열 타입으로 변경하기 (String Class) (0) | 2022.05.02 |
[Java] 중첩 클래스의 접근 제한 (0) | 2022.04.27 |
[Java] 중첩 클래스 (0) | 2022.04.26 |