반응형
설명
문자와 숫자가 섞여있는 문자열이 주어지면 그 중 숫자만 추출하여 그 순서대로 자연수를 만듭니다.
만약 “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;
}
}
반응형