문제
정답
class Solution {
public int solution(String my_string) {
int answer = 0;
for(char c :my_string.toCharArray()){
if(Character.isDigit(c)){
answer += Character.getNumericValue(c);
}
}
return answer;
}
}
다른 사람들이 작성한 정답
replaceAll
class Solution {
public int solution(String my_string) {
int answer = 0;
// 숫자가 아닌 모든 문자열 제거
String str = my_string.replaceAll("[^0-9]","");
for(char ch : str.toCharArray()) {
answer += Character.getNumericValue(ch);
}
return answer;
}
}
아스키코드
class Solution {
public int solution(String my_string) {
int answer = 0;
for(char c : my_string.toCharArray()){
// char 타입은 정수형으로 변환가능
// 각 문자는 아스키코드 값을 가지며, '0'~'9'는 연속적인 아스키코드 값을 가진다.
if(c >= '0' && c <= '9'){
/*
아스키코드 값에서 문자 '0'의 유니코드 값을 뺀다.
-> 해당 숫자문자의 정수값을 반환한다.
예를들면, c - '0'을 수행하면:
-> 0의 아스키코드 값 : 48
'0'일 때: 48 - 48 = 0
'1'일 때: 49 - 48 = 1
'2'일 때: 50 - 48 = 2
*/
answer += c - '0';
}
}
return answer;
}
}
StreamAPI
class Solution {
public int solution(String myString) {
return myString.chars() // 문자열의 각 문자를 스트림에 던진다
.mapToObj(i -> (char) i) //stream의 각 문자를 Stream<Character>의 구성요소로 변환한다.
.filter(Character::isDigit) // 숫자만 필터링
.map(String::valueOf) // 필터링된 숫자 문자를 문자열로 변환 (Character.isDigit 메서드는 문자가 숫자인지 확인)
.mapToInt(Integer::valueOf) //문자열로 변환된 숫자 문자를 정수로 변환(Integer.valueOf는 문자열을 정수로 변환)
.sum(); // 더하기
}
}
::는 메서드 참조(Method Reference)를 나타내는 구문
Share article