[문자열] 9. 숫자만 추출
설명
문자와 숫자가 섞여있는 문자열이 주어지면 그 중 숫자만 추출하여 그 순서대로 자연수를 만듭니다.
만약 “tge0a1h205er”에서 숫자만 추출하면 0, 1, 2, 0, 5이고 이것을 자연수를 만들면 1205이 됩니다.
추출하여 만들어지는 자연수는 100,000,000을 넘지 않습니다.
입력
첫 줄에 숫자가 섞인 문자열이 주어집니다. 문자열의 길이는 100을 넘지 않습니다.
출력
첫 줄에 자연수를 출력합니다.
예시 입력 1
g0en2T0s8eSoft
예시 출력 1
208
<<풀이>>
우선, 이 문제는 8번 문제로 인해서 정규식 표현으로 풀었다. 하지만 다양한 풀이법이 있었다 ㅋㅎ
첫 번째, 정규식 표현 (내가 푼 방식이다)
import java.util.Scanner;
class Main {
public int solution(String str) {
String a = str.replaceAll("[^0-9]", "");
int answer = Integer.parseInt(a);
return answer;
}
public static void main(String[] args) {
Main T = new Main();
Scanner in = new Scanner(System.in);
String str = in.next();
System.out.println(T.solution(str));
}
}
이렇게 풀 수 있다.
이때 Integer.parseInt()로 문자열을 숫자로 바꿔주는 방법을 이용하면 손쉽게 풀 수 있다.
두 번째
아스키코드에 대해 정확히 파악하고 있으면 아스키코드를 활용해서 구할 수 도 있다.
import java.util.Scanner;
class Main {
public int solution(String str) {
int answer = 0;
for (char x : str.toCharArray()) {
if (x >= 48 && x <= 57) answer = answer * 10 + (x - 48);
}
return answer;
}
public static void main(String[] args) {
Main T = new Main();
Scanner in = new Scanner(System.in);
String str = in.next();
System.out.println(T.solution(str));
}
}
'0' 부터 '9'라는 문자는 아스키 코드로 48 ~ 57를 의미한다. 이를 활용해서 구하는데, 이 때 놀라운 점은
바로 answer = answer * 10 + (x - 48) 이런식으로 숫자를 만들어 나간다는 점이다.
물론 당연한 연산 방식일 수도 있으나, 이러한 생각은 어쨌든 나에게 센세이션이다 ㅎㅎ..
아스키코드는 연산을 하는 순간 정수로 바뀐다는 것을 인지하자.
ex) int a = 'A' + 'B' ==> a는 131이 된다.
세 번째 방법은 isDigit()이라는 메소드를 활용한다. Character의 메소드이다.
import java.util.Scanner;
class Main {
public int solution(String str) {
String answer = "";
for (char x : str.toCharArray()) {
if (Character.isDigit(x)) answer += x;
}
return Integer.parseInt(answer);
}
public static void main(String[] args) {
Main T = new Main();
Scanner in = new Scanner(System.in);
String str = in.next();
System.out.println(T.solution(str));
}
}
한 문제에 여러가지 풀이 방식이 있다. 즉, 정답은 딱 정해진건 없다는 것이다. 상황에 맞게 메모리 등을 고려하여 최적의 방식을 사용하면 된다. 그렇게 하기 위해서는 여러가지 방식을 인지하고 숙달해놓는 것이 좋다.