[Android][자바, 코틀린] NumberFormatException 처리 : StringUtils? or TextUtils?
API를 사용하여 데이터를 가져오는데, 값이 비어 있어서 형변환 하는 과정에 오류가 발생되어,
오류 fix를 하기위해
기존에 사용하던 방식으로 해보려고, StringUtils를 이용해보려고 하였으나 없는 것 같아….
(나중에 알고보니 org.apache.commons:commons-lang3:3.14.0 라이브러리 implementation를 별도로 해야함)
ChatGPT를 이용하여 가이드를 안내 받아처리하였다. 안드로이드 개발에서는 TextUtils 메서드가 제공되고 있음을 오늘 알게되었네…
[오류 내용]
java.lang.NumberFormatException: empty String
at jdk.internal.math.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1842)
at jdk.internal.math.FloatingDecimal.parseDouble(FloatingDecimal.java:110)
at java.lang.Double.parseDouble(Double.java:662)
at com.jspsoft.ResultActivity.setupAvgYearsChart(ResultActivity.java:442)
at com.jspsoft.ResultActivity.populateUI(ResultActivity.java:566)
TextUtils 메서드 일부 코드
package android.text;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.content.Context;
import android.os.Parcel;
import android.os.Parcelable;
import android.util.Printer;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.regex.Pattern;
public class TextUtils {
public static final int CAP_MODE_CHARACTERS = 4096;
public static final int CAP_MODE_SENTENCES = 16384;
public static final int CAP_MODE_WORDS = 8192;
public static final Parcelable.Creator<CharSequence> CHAR_SEQUENCE_CREATOR = null;
public static final int SAFE_STRING_FLAG_FIRST_LINE = 4;
public static final int SAFE_STRING_FLAG_SINGLE_LINE = 2;
public static final int SAFE_STRING_FLAG_TRIM = 1;
.......아하 생략
다음은 chatGPT가 알려준 내용을 기록해둔다.
Android(Java)에서 String이 null 또는 empty인지 체크할 때 가장 많이 쓰는 건 유틸 메서드입니다. 상황별로 정리해줄게요.
1. 가장 기본 (순수 Java)
if (str == null || str.isEmpty()) {
// null 또는 ""
}
⚠️ 주의
isEmpty()는 null이면 NPE 발생- 그래서 항상
null먼저 체크해야 함
2. Android에서 가장 많이 쓰는 방법
TextUtils.isEmpty()
📦 클래스
android.text.TextUtils
📌 사용법
import android.text.TextUtils;
if (TextUtils.isEmpty(str)) {
// null 이거나 ""
}
✔️ 특징
null→ true""→ true" "(공백) → false ❗
👉 Android에서는 사실상 표준
3. 공백까지 포함해서 체크하고 싶을 때
if (TextUtils.isEmpty(str) || str.trim().isEmpty()) {
// null, "", " "
}
또는 한 줄로:
if (str == null || str.trim().isEmpty()) {
}
4. Apache Commons (외부 라이브러리)
StringUtils.isEmpty() / isBlank()
import org.apache.commons.lang3.StringUtils;
StringUtils.isEmpty(str); // null or ""
StringUtils.isBlank(str); // null or "", " "
📌 차이
| 메서드 | null | “” | ” “ |
|---|---|---|---|
| isEmpty | true | true | false |
| isBlank | true | true | true |
📦 Gradle
implementation 'org.apache.commons:commons-lang3:3.14.0'
5.요약 (추천 기준)
| 상황 | 추천 |
|---|---|
| Android 기본 | ✅ TextUtils.isEmpty() |
| 공백 포함 체크 | TextUtils.isEmpty() + trim() |
| 서버/순수 Java | StringUtils.isBlank() |
| 외부 라이브러리 X | `str == null |
kotlin에서 대응 방법
1. 가장 기본 (nullable String)
val str: String? = ...
if (str.isNullOrEmpty()) {
// null 또는 ""
}
✅ 권장 1순위
null→ true""→ true" "→ false
2. 공백까지 포함해서 체크
if (str.isNullOrBlank()) {
// null, "", " ", "\n"
}
✔️ 가장 많이 쓰는 패턴
null→ true""→ true" "→ true
👉 입력값 검증용으로 거의 이거 하나면 끝
3. non-null String일 때
val str: String = ...
if (str.isEmpty()) {
// ""
}
if (str.isBlank()) {
// "", " "
}
4. EditText 값 체크 (Android 실전)
val text = editText.text?.toString()
if (text.isNullOrBlank()) {
editText.error = "값을 입력해주세요"
}
또는 더 깔끔하게:
if (editText.text.isNullOrBlank()) {
editText.error = "값을 입력해주세요"
}
5. trim + length 방식 (비추천)
if (str?.trim()?.length == 0) {
}
❌ 가독성 떨어짐
❌ Kotlin에선 쓸 이유 없음
6. Java ↔ Kotlin 비교
| 목적 | Java | Kotlin |
|---|---|---|
| null or empty | TextUtils.isEmpty() | isNullOrEmpty() |
| null or blank | 별도 처리 | isNullOrBlank() |
| NPE 안전성 | 직접 체크 | 기본 제공 |
7. 한 줄 요약
// 99% 경우
if (str.isNullOrBlank()) { }
// 공백은 허용하고 싶을 때
if (str.isNullOrEmpty()) { }



