코테 3일차의 문제들은 대부분 후딱 풀렸음! 문자열 문제였는데 '문자열 뒤집기' 등 메소드를 사용하면 바로 되는 것들이라서, 메소드 검색이 풀이의 8할이었다. 검색하면서 string 관련 메소드들을 많이 보게 됐는데 유용해보이는 것들이 많았다.
문자열 str1 안에 문자열 str2가 있다면 1을, 없다면 2를 리턴하기
class Solution {
public int solution(String str1, String str2) {
if (str1.contains(str2)) return 1;
else return 2;
}
}
contains 메소드도 짱짱 많이 쓰이는 것 중 하나라고 한다. 나는 너무 당연하게 if-else만 떠올렸는데, 이렇게 true-false 구조가 간결&명확한 경우 삼항연산자를 사용하면 좋다.
class Solution {
public int solution(String str1, String str2) {
return (str1.contains(str2) ? 1 : 2);
}
}
문자열 my_string에서 알파벳의 모음 a,e,i,o,u를 제거한 문자열을 리턴하기
class Solution {
public String solution(String my_string) {
return my_string.replaceAll("[aeiou]", "");
}
}
문자열을 대체하는 메소드 중 replace와 replaceAll이 있는데 둘의 차이는 이렇다.
그리고 replaceAll에서는 regex라고 하는 정규표현식이 사용되는데, 그게 아주 많이 쓰인다고 한다. 정규표현식을 직접 쓰기는 어려울 수 있는데, 만들어주는 사이트도 있다고 하니 나중에 참고해보면 좋을 듯 하다.
회원가입 페이지에서 전화번호, 이메일 입력값이 형식에 맞는지를 확인하는 등의 처리를 해야 할 때 많이 쓰이는 메소드라고 한다.
문자열 my_string을 거꾸로 뒤집은 문자열을 리턴하기
class Solution {
public String solution(String my_string) {
StringBuffer sb = new StringBuffer(my_string);
String reverseStr = sb.reverse().toString();
return reverseStr;
}
}
StringBuffer와 StringBuilder도 문자열에서 많이 쓰이는 메소드라고 한다. 여기서 사용한 reverse뿐만 아니라 다양한 기능을 제공하고 있다.
String은 불변객체라서 하나의 변수에 다른 값을 넣게 되면 그 변수 자체가 변하는 게 아니라 메모리를 차지하는 새로운 문자열이 생성된다. 반면, StringBuilder 같은 경우 문자열을 변경하거나 추가할 때 새로운 오브젝트를 사용하지 않고 그 자리의 값 자체를 변경시키기 때문에 메모리 효율 면에서 string보다 좋다.(StringBuilder에서 문자열을 추가하는 메소드는 append 참고)
단, 주의해야 할 것은 String과 StringBuffer, StringBuilder는 타입이 다르다는 점이다. 그래서 위의 풀이처럼 타입을 일치시켜서 반환해주어야 한다.
StringBuilder, StringBuffer reverse 사용하기