문자와 숫자가 섞여있는 문자열이 주어지면 해당 문자열에서 숫자만 추출하여 자연수로 나타낸다. 단, 이 때 숫자의 순서는 유지된다.
// 입력
g0en2T0s8eSoft
// 출력
208
public int solution(String sentence) {
sentence = sentence.replaceAll("[^0-9]", "");
return Integer.parseInt(sentence);
}
첫 번째 풀이는 정규표현식을 이용한 풀이이다.
String.replaceAll(regex, replacement)
을 이용. regex로 [^0-9]
를 사용하여 주어진 문자열에서 숫자 0부터 9까지를 제외한 문자들을 모두 제거한다.Integer.parseInt()
를 이용하여 정수형으로 변환하여 리턴 한다.public int solution(String sentence) {
StringBuilder sb = new StringBuilder();
for (char c : sentence.toCharArray()) {
if (Character.isDigit(c)) { // 현재 문자가 숫자인지 확인
sb.append(c);
}
}
return Integer.parseInt(sb.toString());
}
두 번째 풀이는 Character.isDigit(char)
를 이용한 풀이이다.
Character.isDigit(char)
는 주어진 인자 char
가 숫자(Digit)이면 true를 리턴하고, 숫자가 아니라면 false를 리턴한다.sb
에 추가하여 주고, 결과를 리턴한다.public int solution(String sentence) {
int answer = 0;
for (char c : sentence.toCharArray()) {
if (c >= 48 && c <= 57) { // 숫자 판별
answer = (answer * 10) + (c - 48); // 자릿값 올리면서 갱신
}
}
return answer;
}
세 번째 풀이는 아스키 코드를 이용한 풀이이다.
answer(정답)
에 10을 곱해주어 자릿값을 올려준다(1의 자리 → 10의 자리, 10의 자리 → 100의 자리 … ).// 정규표현식 이용
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public int solution(String sentence) {
sentence = sentence.replaceAll("[^0-9]", "");
return Integer.parseInt(sentence);
}
public static void main(String[] args) throws IOException {
Main sol = new Main();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String sentence = br.readLine();
System.out.println(sol.solution(sentence));
}
}
// Chracter.isDigit() 이용
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public int solution(String sentence) {
StringBuilder sb = new StringBuilder();
for (char c : sentence.toCharArray()) {
if (Character.isDigit(c)) { // 현재 문자가 숫자인지 확인
sb.append(c);
}
}
return Integer.parseInt(sb.toString());
}
public static void main(String[] args) throws IOException {
Main sol = new Main();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String sentence = br.readLine();
System.out.println(sol.solution(sentence));
}
}
// 아스키 코드를 이용. 자릿수를 올려가며 정답 갱신하는 풀이
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public int solution(String sentence) {
int answer = 0;
for (char c : sentence.toCharArray()) {
if (c >= 48 && c <= 57) {
answer = (answer * 10) + (c - 48); // 자릿수 올리면서 갱신
}
}
return answer;
}
public static void main(String[] args) throws IOException {
Main sol = new Main();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String sentence = br.readLine();
System.out.println(sol.solution(sentence));
}
}