본문 바로가기
IT

[Java] 특정 문자 포함 여부 확인하기 String.contains() vs StringUtils.contains()

by urosie 2025. 7. 23.
반응형

Java에서 문자열 검색할 때 contains()는 자주 쓰이는 메서드다. 하지만 실무에선 예상 못한 NullPointerException이 발생할 수 있어서 주의가 필요하다.

 

💥 문제 상황: null을 contains에 넣으면?

java
복사편집
String id = null; boolean result = "abc".contains(id); // 💥 여기서 NPE 발생
  • String.contains(CharSequence s)는 내부에서 indexOf(s)를 호출하는데,
    이때 s가 null이면 바로 NullPointerException이 발생한다.
  • 즉, null 체크 없이 contains 사용하면 예외 터짐

✅ 해결 방법 1: null 체크 후 contains

java
복사편집
if (id != null && "abc".contains(id)) { // 안전하게 실행됨 }

이건 기본적인 방식이지만, 매번 null 체크를 해야 한다는 불편함이 있다.


✅ 해결 방법 2: StringUtils.contains()

Apache Commons Lang의 StringUtils.contains()를 사용하면 더 안전하다.

java
복사편집
import org.apache.commons.lang3.StringUtils; String id = null; boolean result = StringUtils.contains("abc", id); // false 반환, NPE 발생 안함
메서드null 허용 여부결과
"abc".contains(null) NPE 발생
StringUtils.contains(...) false 반환
 

📌 언제 StringUtils를 써야 할까?

  • 입력값이 외부에서 들어오는 경우 (request.getParameter(...), DB 값 등)
  • 유효성 검증이 확실하지 않은 경우
  • 매번 null 체크가 번거로울 때

StringUtils.contains()를 쓰는 게 더 안정적이고 유지보수에도 유리하다


💡 한 줄 요약

String.contains()는 null 들어오면 예외 발생.
StringUtils.contains()는 null-safe 하게 false 반환.

반응형

댓글