class Solution {
private final String ZERO = "zero";
private final String ONE = "one";
private final String TWO = "two";
private final String THREE = "three";
private final String FOUR = "four";
private final String FIVE = "five";
private final String SIX = "six";
private final String SEVEN = "seven";
private final String EIGHT = "eight";
private final String NINE = "nine";
public int solution(String s) {
String answerAsString = getAnswer(s); // 문자가 숫자로 변환된 String을 획득한다.
return Integer.parseInt(answerAsString); // Integer.parseInt를 통해 문자->숫자 변환
}
String getAnswer(String str) {
StringBuilder answerStrBuilder = new StringBuilder();
StringBuilder tempStrBuilder = new StringBuilder();
for(int i = 0; i < str.length(); i++) {
char c = str.charAt(i); // 특정 번지에 있는 문자를 획득
if(isNumber(c)) { // 문자가 숫자라면
answerStrBuilder.append(c); // answer StringBuilder에 추가한다.
} else { // 문자가 아니라면
tempStrBuilder.append(c); // 임시 StringBuilder에 추가하고
if(isNumber(tempStrBuilder.toString())) { // 임시 StringBuilder가 숫자가 되었는지 판단
int numFromStr = convertToNumFromString(tempStrBuilder.toString()); // StringBuilder의 내용을 숫자로 변환
answerStrBuilder.append(numFromStr); // answer StringBuilder에 추가한다.
tempStrBuilder = new StringBuilder(); // 임시 StringBuilder 초기화
}
}
}
return answerStrBuilder.toString();
}
boolean isNumber(char c) { // 인수로 전달받은 char가 숫자인지 확인
if(c >= '0' && c <= '9') return true; // ASCII코드 기준으로 '0'은 48 '9'는 57임 그 사이에 존재하면 숫자
return false;
}
boolean isNumber(String s) { // 인수로 전달받은 String이 숫자인지 확인
if(s.equals(ZERO) || s.equals(ONE) || s.equals(TWO) || s.equals(THREE)
|| s.equals(FOUR) || s.equals(FIVE)|| s.equals(SIX)
|| s.equals(SEVEN) || s.equals(EIGHT) || s.equals(NINE)) return true;
else return false;
}
int convertToNumFromString(String s) { // 인수로 전달받은 문자를 숫자로 변환한다.
if(s.equals(ZERO)) return 0;
else if(s.equals(ONE)) return 1;
else if(s.equals(TWO)) return 2;
else if(s.equals(THREE)) return 3;
else if(s.equals(FOUR)) return 4;
else if(s.equals(FIVE)) return 5;
else if(s.equals(SIX)) return 6;
else if(s.equals(SEVEN)) return 7;
else if(s.equals(EIGHT)) return 8;
else if(s.equals(NINE)) return 9;
return -1;
}
}