문자와 숫자가 섞여있는 문자열이 주어지면 그 중 숫자만 추출하여 그 순서대로 자연수를 만듭니다.
만약 “tge0a1h205er”에서 숫자만 추출하면 0, 1, 2, 0, 5이고 이것을 자연수를 만들면 1205이 됩니다.
추출하여 만들어지는 자연수는 100,000,000을 넘지 않습니다.
첫 줄에 숫자가 섞인 문자열이 주어집니다. 문자열의 길이는 100을 넘지 않습니다.
첫 줄에 자연수를 출력합니다.
예제 입력
g0en2T0s8eSoft
예제 출력208
실패코드
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.next();
System.out.println(solution(str));
}
public static String solution(String str) {
StringBuilder answer = new StringBuilder();
char[] charArr = str.toCharArray();
for (char c : charArr) {
if (Character.isDigit(c)) {
answer.append(c);
}
}
if (answer.charAt(0) == '0') {
answer.deleteCharAt(0);
}
return answer.toString();
}
}
isDigit() 메소드를 사용해서 숫자일 경우 StringBuilder를 통해서 숫자만 추가하여 새로 만들었다.
하지만 실수는 앞에 0이 한개일때만 정상적으로 출력되기 때문에 틀렸다.
또한 너무 복잡하게 풀어버렸다.
정답코드
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.next();
System.out.println(solution(str));
}
public static int solution(String str) {
String answer = "";
for (char c : str.toCharArray()) {
if (Character.isDigit(c)) {
answer+=c;
}
}
return Integer.parseInt(answer);
}
}
StringBuilder 없이 바로 answer에 숫자만 집어넣어주고 parseInt() 메소드로 정수로 변환해주는 코드
다른 풀이
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.next();
System.out.println(solution(str));
}
public static int solution(String str) {
return Integer.valueOf(str.replaceAll("[^0-9]", ""));
}
replaceAll() 메소드를 통해서 0-9가 아닌 문자는 모두 제거하여 숫자만 남긴다. 이후 valueOf()를 통해서 정수값만 뽑아내는 방법이다.
Character.isDigit(x) : x가 숫자인지 확인. true 혹은 false 반환
.deleteCharAt(x) : x번째 인덱스에 있는 문자를 삭제한다
Integer.parseInt(x) : x의 값을 10진수의 Integer형으로 반환해준다