[자바코딩] replace

replace() 를 모르고 문제를 풀어서 시간을 엄청나게 사용했다.
해당 문제는 문자열을 숫자로 바꿔주는 건데, 예를 들어 one2seven 을 127로 바꿔주는 문제이다.
내가 만든 solution은 다음과 같았다.

나의 풀이

 public int solution(String s) {
        HashMap<String, String> map = new HashMap<String, String>();
        map.put("zero","0");
        map.put("one", "1");
        map.put("two", "2");
        map.put("three", "3");
        map.put("four", "4");
        map.put("five", "5");
        map.put("six", "6");
        map.put("seven", "7");
        map.put("eight", "8");
        map.put("nine", "9");

        int tmp;
        String answerStr="";
        String imsi="";
        for(int i=0;i<s.length();i++) {
            tmp = s.charAt(i);
            if(48<=tmp && tmp<=57){
                answerStr+=(char)tmp;
            }
            else {
                imsi+=(char)tmp;
                if(map.containsKey(imsi)) {
                    String str = map.get(imsi);
                    answerStr+=str;
                    imsi="";
                }
            }

        }
        int answer=0;
        answer=Integer.parseInt(answerStr);
        return answer;
    }

Map을 사용해서 풀었고, String으로 들어온 각각을 검사하여 숫자라면 answerStr에 그냥 넣었고, 숫자가 아니라면 String imsi에 넣은 후 map을 통해서 숫자로 바꿔준 후 answer를 얻어냈다.

하지만 여기서 replace를 사용한다면 ?

다른사람 풀이

  String[] number = {"0","1","2","3","4","5","6","7","8","9"};
  String[] alpha = {"zero","one","two","three","four","five","six","seven","eight","nine"};

        for(int i=0; i<10; i++){
            s = s.replaceAll(alpha[i],number[i]);
        }

단 6줄, 실질적으로 for 문 1개만으로 내 삽질의 노력이 날아갔다.

4학년이 이제서야 알았다는 것이 부끄러운 사실이지만, 지난 4년동안 놀았던 것에 대한 대가이므로 더욱 열심히 해야 겠다.

+++
replace()와 replaceAll()의 차이 : 정규표현식 사용가능여부의 차이
replaceFirst() : 일치한 문자열들 중 가장 첫번째만 변경
replaceLast() : 일치한 문자열들 중 가장 마지막만 변경.

좋은 웹페이지 즐겨찾기