일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 제이쿼리
- java
- Eclipse
- 자바
- 공모주 청약
- 주식 청약 일정
- linux
- 6월 공모주 청약 일정
- 리눅스
- IPO
- Stock ipo
- Oracle
- 주식 청약
- 자바스크립트
- 공모주
- php
- jquery
- 공모주 청약 일정
- css
- codeigniter
- 주식
- MYSQL
- html
- SQL
- 오라클
- 맥
- 코드이그나이터
- 7월 공모주 청약 일정
- JavaScript
- Stock
- Today
- Total
개발자의 끄적끄적
[java & spring] 문자열(String)의 빈 값 혹은 Null을 다루는 여러가지 방법[펌] 본문
[java & spring] 문자열(String)의 빈 값 혹은 Null을 다루는 여러가지 방법
자바에서 문자열의 빈 값("")과 Null을 다루는 방법은 여러 가지가 존재합니다.
먼저, 문자열의 빈 값과 null을 다룰 때 아래와 같은 코드를 자주 만나게 되는데요.
boolean checkString(String str) {
return str == null || str.equals("");
}
하지만 이 방법은 equals()가 내부적으로 가지는 여러 로직에 의해 기능적으로 낭비일 수 있습니다.
그래서 여기서는 3가지 방법을 소개하려고 합니다.
1. 자바 6보다 낮은 버전이라면 length()를 활용해보시기 바랍니다.
아래의 코드를 봐주시기 바랍니다.
//equals()
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = count;
if (n == anotherString.count) {
char v1[] = value;
char v2[] = anotherString.value;
int i = offset;
int j = anotherString.offset;
while (n-- != 0) {
if (v1[i++] != v2[j++])
return false;
}
return true;
}
}
return false;
}
//length()
public int length() {
return count;
}
length()는 길이만 계산하여 반환하는 것에 반해, equals()는 내부적으로 복잡한 로직이 존재하는 것을 볼 수 있습니다.
length()의 사용 방법은 다음과 같습니다.
boolean checkString(String str) {
return str == null || str.length() == 0;
}
문자열이 빈 값이면 true를 반환합니다.
단, 여기서 문제가 있는데요.
바로 문자열이 스페이스바를 이용하여 입력한 whitespace(" ")인 경우입니다.
그럴 때는 아래와 같이 trim()을 이용하여 공백을 제거 후 사용하시면 됩니다.
boolean checkString(String str) {
return str == null || str.trim().length() == 0;
}
2. 자바 6 이상이라면 isEmpty()를 사용해보시기 바랍니다.
메서드명이 좀 더 직관적이죠?
설명을 보면 다음과 같습니다.
1번의 length()를 이용한 방법과 동일한 원리임을 알 수 있습니다.
사용 방법은 다음과 같습니다.
boolean checkString(String str) {
return str == null || str.isEmpty();
}
문자열이 빈 값("") 일 경우 true를 리턴합니다.
하지만 isEmpty()를 이용할 경우에도 whitespace(" ")인 경우에 문제가 생길 수 있는데요.
이번에도 아래와 같이 trim()을 이용하여 공백을 제거 후 사용하시면 됩니다.
boolean checkString(String str) {
return str == null || str.trim().isEmpty();
}
3. 자바 11 이상이라면 isBlank()를 사용해보시기 바랍니다.
1번 방법과 2번 방법 모두, 고질적인 whitespace(" ")의 문제가 있었는데요.
isBlank()를 활용하는 것도 하나의 방법이 될 수 있습니다.
설명을 보면 문자열이 빈 값이거나 whitespace인 경우에는 true를 반환한다고 되어 있습니다.
사용 방법은 다음과 같습니다.
boolean checkString(String str) {
return str == null || str.isBlank();
}
4. 라이브러리를 추가하여 StringUtils를 활용하는 것을 추천드립니다.
StringUtils는 아파치 커먼즈(Apache Commons)의 라이브러리인데요.
스프링을 사용하신다면 다음과 같이 추가해주시면 됩니다.
<!--MAVEN-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
<!--GRADLE-->
compile group: 'org.apache.commons', name: 'commons-lang3', version: '3.7'
StringUtils의 빈 값을 처리하는 메서드는 2가지가 있는데요.
바로 isEmpty()와 isBlank()입니다.
사용 방법은 각각 다음과 같습니다.
//isEmpty()
boolean checkString(String str) {
return StringUtils.isEmpty(str);
}
//isBlank()
boolean checkString(String str) {
return StringUtils.isBlank(str);
}
문자열이 빈 값("") 일 경우 true를 반환합니다.
하지만 whitespace(" ")의 처리에서는 다른데요.
isEmpty()는 false를, isBlank()는 true를 반환합니다. 이 점을 주의하셔서 사용하시면 될 것 같습니다.
하지만 두 가지의 방법 모두 공통적으로 지닌 강점이 있는데요.
바로 NullPointerException을 발생시키지 않는다는 점입니다.
위에서 제시한 1~3번 모두 문자열의 null처리를 추가로 작성해줬었죠?
하지만 StringUtils를 이용하면 그럴 필요가 없습니다.
'개발 > java & jsp' 카테고리의 다른 글
[java/spring] 파일확장자를 필터링 하는 클래스 - FileExtFilter [펌] (0) | 2020.08.13 |
---|---|
[java] 파일에서 확장자만, 파일명만 구하기? [펌] (0) | 2020.08.13 |
[Spring] ResponseEntity는 왜 쓰는 것이며 어떻게 쓰는걸까? [펌] (0) | 2020.08.11 |
스프링(Spring) 파일 업로드(File Upload) [펌] (0) | 2020.08.10 |
[JSTL] jstl if else 문 [펌] (0) | 2020.08.05 |