[자바코딩] 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() : 일치한 문자열들 중 가장 마지막만 변경.
Author And Source
이 문제에 관하여([자바코딩] replace), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@gnoesnooj/자바코딩-replace저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)