본문 바로가기

Java/Java 알고리즘 인프런

[Ch.01 - String] 09. 숫자만 추출 (+ replaceAll)

728x90
반응형
9. 숫자만 추출

 

설명

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

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

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

입력

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

출력

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

 

예시 입력 1 

g0en2T0s8eSoft

예시 출력 1

208

1. 변환을 이용

2. 아스키 번호를 이용

 

 

1. 변환을 이용

 

(1) 반환형이 int형일 경우

 

문자열 확인 메서드

Chracter.isDigit(arr[i])

 

String to Integer 변환

int b = Integer.parseInt(a);

import java.util.Scanner;
  
public class Main {
  public int solution(String str){
    String answer="";
    for(char x : str.toCharArray()){
      if(Character.isDigit(x)) answer+=(x-48);
    }
    
    return Integer.parseInt(answer);
  }
  public static void main(String[] args){
    Main T=new Main();
    Scanner kb=new Scanner(System.in);
    String str= kb.next();
    System.out.println(T.solution(str));
  }
}

 

(2) 반환형이 String형일 경우

Integer.parseInt를 이용하지 않고, 바로 answer에 넣기 

import java.util.Scanner;
  
public class Main {
  public String solution(String str){
    String answer="";
    for(char x : str.toCharArray()){
      if(Character.isDigit(x)) answer+=x;
    }
    
    return answer;
  }
  public static void main(String[] args){
    Main T=new Main();
    Scanner kb=new Scanner(System.in);
    String str= kb.next();
    System.out.println(T.solution(str));
  }
}

 

 

+) 세련된 풀이

2. 아스키 번호를 이용

(1) 반환형이 int형일 경우

-> 아스키 번호가 48부터 57 사이일 경우 문자임을 이용

import java.util.Scanner;
  
public class Main {
  public int solution(String str){
    String answer="";
    for(char x : str.toCharArray()){
      if(x>=47 && x<=58) answer+=x-48;
    }
    
    return Integer.parseInt(answer);
  }
  public static void main(String[] args){
    Main T=new Main();
    Scanner kb=new Scanner(System.in);
    String str= kb.next();
    System.out.println(T.solution(str));
  }
}

 

(2) 반환형이 String형일 경우

Integer.parseInt를 이용하지 않고, 바로 answer에 넣기 

 

answer=answer*10+(x-48);
//각 자리수에 맞게 넣기위해

 

import java.util.Scanner;
  
public class Main {
  public int solution(String str){
    int answer=0;
    for(char x : str.toCharArray()){
      if(x>=47 && x<=58) answer=answer*10+(x-48);
    }
    
    return answer;
  }
  public static void main(String[] args){
    Main T=new Main();
    Scanner kb=new Scanner(System.in);
    String str= kb.next();
    System.out.println(T.solution(str));
  }
}

 

 

replaceAll() 이용

import java.util.Scanner;
  
public class Main {
  public static void main(String[] args){
    Scanner in=new Scanner(System.in);
    String input1 = in.next();
    System.out.println(solution(input1));
  }
  static int solution(String str){
    str=str.replaceAll("[^0-9]", "");
    
    return Integer.parseInt(str);
  }
}

 

 


import java.util.Scanner;
  
public class Main {
  public static void main(String[] args){
    Scanner in=new Scanner(System.in);
    String str= in.next();
    str=str.replaceAll("[A-Za-z]", "");
    
    int answer=Integer.parseInt(str);
    System.out.println(answer);
  }
}

 

import java.util.Scanner;
  
public class Main {
  public static void main(String[] args){
    Scanner in=new Scanner(System.in);
    String str= in.next();
    str=str.replaceAll("[^0-9]", "");
    
    int answer=Integer.parseInt(str);
    System.out.println(answer);
  }
}
728x90
반응형