Published:
Updated:


Solution

package programmers.sully.week2;

public class 숫자_문자열과_영단어 {
    public static boolean isInteger(String strValue) {
        try {
            Integer.parseInt(strValue);
            return true;
        } catch (NumberFormatException ex) {
            return false;
        }
    }

    // "one4seveneight"	-> 1478
    // contains를 써볼까? -> 쓴다 해도 안 될 듯
    // 아 그럼 indexOf를 써보자
    public int solution(String s) {
        StringBuilder answerSb = new StringBuilder();
        StringBuilder tmpSb = new StringBuilder();
//        char[] sToCharArr = s.toCharArray();

        // sToCharArr[i]가 문자열이면 one부터 nine까지의 case(숫자)와 동일한지 알아보기

        // 만약 문자열이 아닌 숫자형 String("1", "2"...)이라면 더해주고,
        // 문자형 String이면 StringBuilder로 append를 해주면서 case(숫자)에 적합한지 확인해주기

        // String이 문자인지 아닌지 확인 -> isInteger 메서드로 판별

        for (int i = 0; i < s.length(); i++) {
            // String.valueOf 그만 좀 쓰자
            if (isInteger(String.valueOf(s.charAt(i)))) { // 숫자형
                answerSb.append(Integer.parseInt(String.valueOf(s.charAt(i))));
            } else { // 문자형 -> StringBuilder로 append를 해주면서 case(숫자)에 적합한지 확인
                tmpSb.append(s.charAt(i));

                switch (tmpSb.toString()) {
                    case "zero" -> {
                        answerSb.append("0");
                        tmpSb = new StringBuilder();
                    }
                    case "one" -> {
                        answerSb.append("1");
                        tmpSb = new StringBuilder();
                    }
                    case "two" -> {
                        answerSb.append("2");
                        tmpSb = new StringBuilder();
                    }
                    case "three" -> {
                        answerSb.append("3");
                        tmpSb = new StringBuilder();
                    }
                    case "four" -> {
                        answerSb.append("4");
                        tmpSb = new StringBuilder();
                    }
                    case "five" -> {
                        answerSb.append("5");
                        tmpSb = new StringBuilder();
                    }
                    case "six" -> {
                        answerSb.append("6");
                        tmpSb = new StringBuilder();
                    }
                    case "seven" -> {
                        answerSb.append("7");
                        tmpSb = new StringBuilder();
                    }
                    case "eight" -> {
                        answerSb.append("8");
                        tmpSb = new StringBuilder();
                    }
                    case "nine" -> {
                        answerSb.append("9");
                        tmpSb = new StringBuilder();
                    }
                }
            }
        }

        return Integer.parseInt(answerSb.toString());
    }

    public static void main(String[] args) {
        System.out.println(new 숫자_문자열과_영단어().solution("one4seveneight"));
    }
}

Leave a comment