개발놀이터
1-9. 숫자만 추출 본문
package string.ExtractionNumber19.my;
import java.util.Scanner;
public class Main {
/**
* -내 풀이-
* replaceAll 메서드를 이용해 정규표현식으로 숫자가 아닌 것들을 빈칸으로 바꿔 숫자만 뽑았다.
*
* --피드백--
* IDEA 의 도움을 받아버렸다... 실전에서였으면 해결하기 쉽지 않았을 문제
*
* --선생님의 풀이--
* 1. answer = 0 으로 초기화 후 String -> toCharArray 로 바꾸고 각각의 문자를 아스키코드로 48 ~ 57 로 설정하여
* for (char x : str.toCharArray()) {
* if (x >= 48 && x <= 57) {
* answer = answer * 10 + (x - 48); (여기서 x 는 각각의 숫자)
* }
* }
* return answer;
* 이렇게 숫자로 계산
*
* 2. Character 클래스의 isDigit() 메서드를 이용해 숫자인지 아닌지 확인하고 숫자만 하나씩 누적하는 방식
* String answer = "";
* for (char x : str.toCharArray()) {
* if (Character.isDigit(x)) { // isDigit() 메서드는 해당 문자가 숫자인지 아닌지 확인하는 메서드
* answer += x;
* }
* }
* return Integer.parseInt(answer);
*/
public static void main(String[] args) {
Scanner kb = new Scanner(System.in);
String input = kb.next();
System.out.println(solution(input));
}
private static int solution(String input) {
if (input.length() > 100) {
throw new StringOrNumberFormatException("100자를 넘길 수 없습니다.");
}
input = input.replaceAll("\\D", "");
if (input.equals("")) {
throw new StringOrNumberFormatException("반드시 숫자가 하나 이상 있어야 합니다.");
}
if (Long.parseLong(input) > 100000000) {
throw new StringOrNumberFormatException("숫자로 변환된 값은 1억을 넘을 수 없습니다.");
}
return Integer.parseInt(input);
}
static class StringOrNumberFormatException extends RuntimeException {
public StringOrNumberFormatException() {
super();
}
public StringOrNumberFormatException(String message) {
super(message);
}
public StringOrNumberFormatException(String message, Throwable cause) {
super(message, cause);
}
public StringOrNumberFormatException(Throwable cause) {
super(cause);
}
protected StringOrNumberFormatException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
}
}
}
package string.ExtractionNumber19.teacher;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner kb = new Scanner(System.in);
String str = kb.next();
System.out.println(solution(str));
}
private static int solution(String str) {
String answer = "";
for (char x : str.toCharArray()) {
if (Character.isDigit(x)) {
answer += x;
}
}
return Integer.parseInt(answer);
/*
int answer = 0;
for (char x : str.toCharArray()) {
if (x >= 48 && x<= 57) answer = answer * 10 + (x - 48);
}
return answer;
*/
}
}
'기타 > 코딩테스트' 카테고리의 다른 글
1-11. 문자열 압축 (0) | 2023.02.09 |
---|---|
1-10. 가장 짧은 문자 거리 (0) | 2023.02.09 |
1-8. 유효한 회문 문자열 (0) | 2023.02.09 |
1-7. 회문 문자열 (0) | 2023.02.09 |
1-6. 중복된 문자 제거 (0) | 2023.02.07 |