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
- str을 charArr로 만들어 인덱스를 돌면서 digit만 판별
- 그러면 0208남음
- 이제 0을 없애고 208만 남기기위해
- 기존 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
✔️ 숫자만 남기는 방법
- ascii를 확인해서 숫자만 남긴다. 48~57
Character.isDigit()
을 활용한다.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.