Post

String_숫자만 추출_parseInt, valueOf

✅ 숫자만 추출하고, 앞 자리가 0이면 자연수로 만든다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class Main {
    public int solution(String str){
        int answer= 0;
        char[] charArr= str.toCharArray();
        for(int i=0; i<charArr.length; i++){
            char c= charArr[i];
            if(  c>= 48 &&  c <=57){ //char은 int
                answer = answer*10 + (c-48); //answer을 10의 자리씩 한 자리 위로 올리고, c값 더하기
            }
        }
        return answer;
    }
    public static void main(String[] args) {
        Main T = new Main();
        Scanner sc= new Scanner(System.in);
        String str= sc.nextLine();
        System.out.println(T.solution(str));

    }

}

//⭐️input:
//g0en2T0s8eSoft
//⭐️output:
//208
  1. str을 charArr로 만들어 인덱스를 돌면서 digit만 판별
  2. 그러면 0208남음
  3. 이제 0을 없애고 208만 남기기위해
  4. 기존 answer값에 10을 곱하고 새로운 c값을 넣어서 새로운 answer값 만들기

🟢 Character.isDigit(), parseInt

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Main {
    public int solution(String str){
        String answer= "";
        for(char x : str.toCharArray()){
            if(Character.isDigit(x)) answer += x; //이렇게만 하면 0208
        }
        return Integer.parseInt(answer); //이렇게 int로 바꿔주면 앞에 0 사라진다
    }
    public static void main(String[] args) {
        Main T = new Main();
        Scanner sc= new Scanner(System.in);
        String str= sc.nextLine();
        System.out.println(T.solution(str));

    }

}

🔵 ThingsILearned

✔️ parseInt

parse means convert Thus, parseInt means to convert a string into integer.

✔️ parseInt 내부동작

1
2
3
4
5
6
7
result = 0,
1) '0' -> result = (result * 10) + 0     # result =  0

2) '2' -> result = (result * 10) + 2.    # result = 2

3) '3' -> result = (result * 10) + 3.    # result = 23

✔️ parseInt() 🆚 valueOf()

✔️ parseInt(): returns primitive int ✔️ valueOf(): returns Integer object

1
2
3
4
5
6
7
8
9
        String num= "1010";
        int parseInt= Integer.parseInt(num); //int
        System.out.println(parseInt); // Output: 1010

        Integer valueOf= Integer.valueOf(num); //Integer
        System.out.println(valueOf); // Output: 1010

        Integer valueOfOverload= Integer.valueOf(num, 2); //valueOf는 2진법 등 다양한 메소드 존대
        System.out.println(valueOfOverload); // Output: 10

✔️ ascii “0” = 48, “9” = 57

✔️ 숫자만 남기는 방법

  1. ascii를 확인해서 숫자만 남긴다. 48~57
  2. Character.isDigit()을 활용한다.
  3. replaceAll()해서 숫자 아닌 것들은 ""으로 대체한다.

🟢 replaceAll, valueOf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Main {
    public int solution(String str){
        int answer;
        answer= Integer.valueOf(str.replaceAll("[^\\d]+",""));

        return answer;
    }
    public static void main(String[] args) {
        Main T = new Main();
        Scanner sc= new Scanner(System.in);
        String str= sc.nextLine();
        System.out.println(T.solution(str));

    }

}

🟡 replaceAll, subString() 왜 안될까?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Main { public String solution(String str){
    String answer= "";
    str= str.replaceAll("[^\\d]+","");
    for(int i=0; i<str.length(); i++){
        if(str.charAt(i) == '0'){
            answer = str.substring(i+1);
            } else return answer=str;
        }
    return answer;
}
public static void main(String[] args) {
    Main T = new Main();
    Scanner sc= new Scanner(System.in);
    String str= sc.nextLine();
    System.out.println(T.solution(str));
    }
}
  • lkflnk0123같은 경우 0123을 반환함
  • str.charAt(i) == '0'의 경우 중간에 0이 나오면 우리가 원하는 output불가
This post is licensed under CC BY 4.0 by the author.