UncategorizedAndroidKotlin프로그래밍

[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“”” “
isEmptytruetruefalse
isBlanktruetruetrue

📦 Gradle

implementation 'org.apache.commons:commons-lang3:3.14.0'

5.요약 (추천 기준)

상황추천
Android 기본TextUtils.isEmpty()
공백 포함 체크TextUtils.isEmpty() + trim()
서버/순수 JavaStringUtils.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 비교

목적JavaKotlin
null or emptyTextUtils.isEmpty()isNullOrEmpty()
null or blank별도 처리isNullOrBlank()
NPE 안전성직접 체크기본 제공

7. 한 줄 요약

// 99% 경우
if (str.isNullOrBlank()) { }

// 공백은 허용하고 싶을 때
if (str.isNullOrEmpty()) { }
Hi, I’m 관리자