본문 바로가기
Java/Coding-Test

[Java] 1-9 숫자만 추출

by JS1111 2022. 1. 15.

문제

문자와 숫자가 섞여있는 문자열이 주어지면 그 중 숫자만 추출하여 그 순서대로 자연수를 만듭니다.
만약 “tge0a1h205er”에서 숫자만 추출하면 0, 1, 2, 0, 5이고 이것을 자연수를 만들면 1205이 됩니다.
추출하여 만들어지는 자연수는 100,000,000을 넘지 않습니다.

입력

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

출력

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

예시 입력

g0en2T0s8eSoft

예시 출력

208

출처

인프런 - 자바-알고리즘-문제풀이-코테대비

내 풀이

private static int extractNumber1(String input) {
    int result = 0;
    for(char ch : input.toCharArray()) {
        if(Character.isDigit(ch)) {
            result *= 10;
            result += ch - '0'; // 숫자(char)를 int로
        }
    }
    return result;
}

문자열의 문자를 순환하면서 숫자일 때 자릿수를 올리고 그 숫자를 더한다


private static int extractNumber2(String input) {
    StringBuilder sb = new StringBuilder();
    input.chars()
            .filter(Character::isDigit)
            .forEach(sb::appendCodePoint);
    return Integer.parseInt(sb.toString());
}

Stream.filter를 사용하여 숫자만 필터링한후 Integer.parseInt로 파싱한다

다른 풀이

/* 강의 풀이 */
public int solution(String s){
    //int answer=0;
    String answer="";
    for(char x : s.toCharArray()){
        //if(x>=48 && x<=57) answer=answer*10+(x-48);
        /*if(Character.isDigit(x)){
            answer=answer*10+ Character.getNumericValue(x);
        }*/
        if(Character.isDigit(x)) answer+=x;
    }
    return Integer.parseInt(answer);
}

기억할 점

Integer.parseInt vs Integer.valueOf

parseIntint를 반환, valueOf는 Integer를 반환한다


숫자(char)를 int로 바꾸기

  1. ch - '0'
  2. Character.getNumericValue(ch);

'Java > Coding-Test' 카테고리의 다른 글

[Java] 1-11 문자열 압축  (0) 2022.01.16
[Java] 1-10 가장 짧은 문자거리  (0) 2022.01.16
[Java] 1-8 유효한 팰린드롬  (0) 2022.01.15
[Java] 1-7 회문 문자열  (0) 2022.01.14
[Java] 1-6 중복문자제거  (0) 2022.01.13

댓글