1-9 숫자만 추출 (Java)

정우·2022년 9월 26일

✏️ 문제


설명

문자와 숫자가 섞여있는 문자열이 주어지면 그 중 숫자만 추출하여 그 순서대로 자연수를 만듭니다.

만약 “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형으로 반환해준다

profile
That's it

0개의 댓글