본문 바로가기
카테고리 없음

[Java] 숫자만 추출

by codeok 2022. 6. 15.
반응형

설명

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

만약 “tge0a1h205er”에서 숫자만 추출하면 0, 1, 2, 0, 5이고 이것을 자연수를 만들면 1205이 됩니다.

추출하여 만들어지는 자연수는 100,000,000을 넘지 않습니다.

입력

첫 줄에 숫자가 섞인 문자열이 주어집니다. 문자열의 길이는 100을 넘지 않습니다.

출력

첫 줄에 자연수를 출력합니다.

 
 

예시 입력 1 

g0en2T0s8eSoft

 

예시 출력 1

208

 

replaceAll()과 Integer.parseInt()를 이용한 방법

replaceAll()에서는 [^0-9] 0~9가 아닌 문자는 모두 공백("")으로 치환시켜서 제거했다.

g0en2T0s8eSoft  문자열에서 숫자만 추출을 하면 0208 결과가 나온다.

해당 결과를 자연수로 만들면 208 결과가 나오기에 Integer.parseInt()를 통해서 해결했다.

package section01.E09_숫자만_추출;

import java.io.*;

public class Main {

    public int solution(String word){

        String numberWord = word.replaceAll("[^0-9]", "");

        return Integer.parseInt(numberWord);
    }

    public static void main(String[] args) throws IOException {
        Main T = new Main();
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        String word = br.readLine();
        bw.write(String.valueOf(T.solution(word)));

        bw.flush();
        bw.close();
    }
}

 

숫자 아스키 코드를 이용한 방법

숫자 아스키 코드의 범위는 0(48) ~ 9(57)이다.

문자의 범위를 체크할 때와 자연수로 만들 때 0의 아스키 코드 값을 이용하기에 상수로 선언해서 사용했다.

 

answer = answer * 10 + (w - ASCII_CODE_ZERO)의 연산의 경우는 다음과 같이 동작한다.

Ex) 0208

for (char w :word.toCharArray()) answer answer * 10  w - ASCII_CODE_ZERO answer * 10 + (w - ASCII_CODE_ZERO)
0 0 0 * 10 = 0 48 - 48 = 0 0 + 0 = 0
2 0 0 * 10 = 0 50 - 48 = 2 0 + 2 = 2
0 2 2 * 10 = 20 48 - 48 = 0 20 + 0 = 20
8 20 20 * 10 = 200 56 - 48 = 8 200 + 8 = 208

 

package section01.E09_숫자만_추출;

import java.io.*;

public class Main_ASCII {

    private static final int ASCII_CODE_ZERO = 48;
    private static final int ASCII_CODE_NINE = 57;

    public int solution(String word){

        int answer = 0;

        for (char w : word.toCharArray()){
            // 0 ~ 9
            if (w >= ASCII_CODE_ZERO && w <= ASCII_CODE_NINE){
                answer = answer * 10 + (w - ASCII_CODE_ZERO);
            }
        }

        return answer;
    }
}

 

반응형