자바) 문자열이 숫자인지 확인하는 방법 (참고 프로그래머스 - 문자열 다루기)
프로그래머스 알고리즘 문제 - 문자열 다루기 기본 - 를 풀다가 문자열이 숫자로 이루어졌는지 확인하는 방법을 정리해 보았다.
문제와 예시
힌트이자 결론부터 말하면 3가지 방법이 있다.
그전에 잠시!
(아직 문제 풀이를 시도하지 않았다면 적어도 30분 이상은 고민해 보시길 추천한다)
(혹시 문제에 대한 힌트가 필요하다면 여기를 눌러보자.)
자 - 3가지 방법은 다음과 같다.
1. chartAt()을 활용하여 숫자 체크하기
2. isDigit() 함수 활용하기
3. NumberFormatException 활용하기
1. chartAt()을 활용하여 숫자 체크하기
제일 직관적인 방법이다. for문을 돌려서 문자 하나마다 char형으로 제시한 숫자와 동일한지 확인하기
String s = "983z";
boolean answer = true;
// 1. chartAt()을 활용하여 숫자 체크하기
for(int i=0; i<s.length(); i++) {
if (!('0' <= s.charAt(i) && s.charAt(i) <= '9')) {
answer = false;
}
}
2. isDigit() 함수 활용하기
Character.isDigit() 함수는 입력받은 char 형 문자가 숫자인지 아닌지 확인 후 Boolean 값으로 반환한다.
숫자면 True, 숫자가 아니면 False로 반환한다.
String s = "983z";
boolean answer = true;
// 2. isDigit() 함수 활용하기
char check;
for(int i=0; i<s.length(); i++) {
check = s.charAt(i);
if (!Character.isDigit(check)) {
answer = false;
}
}
3. NumberFormatException 활용하기
해당 문제를 풀이하는 과정에서 NumberFormatException를 너무 사용하고 싶었지만 어떻게 사용해야 할지 몰라 전전긍긍해하고 있었는데 다른 사람의 풀이에서 1위를 차지한 분이 try catch 문을 사용하여 NumberFormatException를 사용한 것을 확인하여 가져와 보았다.
다음에 Exception 예외처리할 때 이렇게 써봐야지.
class Solution {
public boolean solution(String s) {
if(s.length() == 4 || s.length() == 6){
try{
int x = Integer.parseInt(s);
return true;
} catch(NumberFormatException e){
return false;
}
}
else return false;
}
}
다른 사람의 풀이만큼 이마를 탁 치게 하는 것은 없는 것 같다.
더 논리적이고 효율적인, 특히 수학적 방법을 매우 간단하게 작성한 코드는 아름답게 까지 느껴진다.
그런데 이렇게 파도같이 물 밀리듯 오는 감동은 내가 오랜 시간 고민하지 않으면 느낄 수 없다.
그러니 문제가 풀리지 않을 때 시간이 없다는 핑계로, 나는 못하니까 그냥 봐버려야지라는 마음으로 다른 사람의 풀이를 보지 말고 적어도 30분 이상은 충분히 깊게 고민해 보자. 카타르시스가 엄청나게 느껴질 거다.
참고로 이것은 나에게 말하는 것이다. 나와 모두 파이팅이다.