프로그래밍 언어/Java

java.lang.NumberFormatException: empty String 에러 해결

happy_life 2021. 10. 26. 11:39

 

에러발생

 

java.lang.NumberFormatException: empty String

 

Double.parseDouble을 사용하는 과정에서 에러가 발생

 

 

xml 코드

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">



    <EditText
        android:id="@+id/EditText_et"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:hint="input number"
        android:inputType="numberDecimal"
        android:maxLength="4">

    </EditText>
    

</RelativeLayout>

 

java코드

public class MainActivity extends AppCompatActivity {


    public class InputFilterMinMax implements InputFilter{

        private int min,max;

        public InputFilterMinMax(int min, int max){

            this.min = min;
            this.max = max;
        }

        public InputFilterMinMax(String min, String max){
            this.min = Integer.parseInt(min);
            this.max = Integer.parseInt(max);
        }

        public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
            try {
                int input = Integer.parseInt(dest.toString() + source.toString());
                if (isInRange(min, max, input))
                    return null;
            } catch (NumberFormatException nfe) { }
            return "";
        }

        private boolean isInRange(int a, int b, int c) {
            return b > a ? c >= a && c <= b : c >= b && c <= a;
        }

    }
    EditText EditText_et;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        EditText_et = findViewById(R.id.EditText_et);

        EditText_et.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
                if(Double.parseDouble(EditText_et.getText().toString()) > 99){
                    String N = "99";
                    EditText_et.setText(N);
                }

            }

            @Override
            public void afterTextChanged(Editable editable) {

            }
        });
    }
}

 

 

오류원인코드

 

Double.parseDouble 이나 Integer.paseInt 메소드는 인자로 들어오는 String에 아무것도 없을 경우 에러를 발생시킵니다.

이는 NumberFormatException 의 예외 중 하나입니다.

따라서 이를 해결하기 위해

try catch 예외처리 구문을 사용해야합니다.

 

 

해결방법

 

왼쪽의 코드를 ->> 오른쪽처럼 바꿔주시면 됩니다.

catch 밑의 부분은 방문자분께서 어떤 상황이 오류인지 알 수있게 추가적으로 넣어둔 코드 입니다.

Toast 코드를 다 지우고 return; 만 넣으셔도   무방합니다.

 

 

값이 없을 때 예외가 발생하며

이것은 catch 구문에 의해 저런식으로 toastmessage를 출력하는 것입니다.