반응형

필요한 이유

별 문제는 아니지만 문제를 풀다보면 혹은 로직을 구성하다보면 입력받은 값이 정수나 문자열 중 랜덤으로 들어오게 되는 경우가 있습니다. 이러한 상황에서 입력받은 문자열을 무조건 toInt()를 사용하여 정수로 변환을 시키려면

Exception in thread "main" java.lang.NumberFormatException 에러가 발생합니다. 이것을 방지하기 위하여 문자열이 정수로만 이루어져있는지(정수로 변환이 가능) 그렇지 않은지(정수로 변환이 불가능) 판단하는 함수를 만들어보았습니다.

로직

굉장히 단순합니다... 함수의 이름은 isNum이고 입력받은 문자열이 정수라면 true를 그렇지 않다면 false를 반환합니다. 문자열을 함수의 인자값으로 받고 그 문자열을 forEach를 사용하여 문자 하나씩 탐색합니다. 각 문자를 .code()함수를 사용하여 아스키코드로 변환시켜준 후 0 ~9 사이의 아스키 코드값인지 확인합니다. (0의 아스키 코드는 48, 9의 아스키 코드는 57) 만약 해당 범위를 벗어나게 된다면 0 ~ 9 이외의 문자, 즉 정수가 아닌 수가 포함되어있다는 뜻이므로 즉시 함수가 false를 반환합니다. 

입력받은 문자열이 정수인지 확인하는 함수 / 정수로 변환이 가능한지 확인하는 함수

// 입력받은 문자열이 정수인지 확인하는 함수
fun isNum(string: String): Boolean {

    // 입력받은 문자열이 정수라면 isNum은 true
    var isNum = true

    // 입력받은 문자열을 문자 하나씩 탐색
    string.forEach { char ->

        // 아스키코드로 변환된 "문자" - 대문자일수도 있으니 소문자로 바꿔줌.
        val charConvertedToCode = char.code

        // 정수 0의 아스키 코드는 48, 정수 9의 아스키 코드는 57 - 해당 범위를 벗어나면 정수가 아님.
        if (charConvertedToCode > 57 || charConvertedToCode < 48) {
            isNum = false
            return isNum
        }
    }

    return isNum
}
반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기