반응형
필요한 이유
별 문제는 아니지만 문제를 풀다보면 혹은 로직을 구성하다보면 입력받은 값이 정수나 문자열 중 랜덤으로 들어오게 되는 경우가 있습니다. 이러한 상황에서 입력받은 문자열을 무조건 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
}
반응형
'정보[Information]' 카테고리의 다른 글
거듭제곱의 성질을 이용하여 거듭제곱 알고리즘 최적화 시키기(분할정복)[Kotlin - 코틀린] (0) | 2022.07.08 |
---|---|
git status 명령어 실행 시 파일명이 숫자로 나올 때 해결법 (0) | 2022.06.20 |
안드로이드[Android] Check your module classpath for missing or conflicting dependencies 오류 (0) | 2022.05.29 |
com.intellij.util.io.PersistentEnumeratorBase$CorruptedException: PersistentEnumerator storage corrupted 오류 (0) | 2022.05.19 |
무한 dquote> 빠져나가기... (0) | 2022.05.18 |
최근댓글