[Programmers]-신규 아이디 추천
문제
문자열을 얼마나 잘 다루는지 알 수 있는 문제이다. 정규표현식이 더중요하다.
코드
import java.util.*;
class Solution {
public String solution(String new_id) {
//1단계
new_id = new_id.toLowerCase();
//2단계
new_id = new_id.replaceAll("[^a-z0-9-_.]","");
StringBuilder sb = new StringBuilder(new_id);
//3단계
for(int i=0;i<sb.length()-1;i++){
if(sb.charAt(i) == '.'){
for(int j=i+1;j<sb.length();j++){
if(sb.charAt(j) != '.') break;
sb.deleteCharAt(j--);
}
}
}
//4단계
if(sb.length() != 0){
if(sb.charAt(0)=='.') sb.deleteCharAt(0);
}
if(sb.length() != 0){
if(sb.charAt(sb.length()-1)=='.') sb.deleteCharAt(sb.length()-1);
}
//5단계
if(sb.length() == 0) sb.append("a");
//6단계
if(sb.length() >= 16) sb.delete(15,sb.length());
//7단계
if(sb.length() <= 2){
String s = ""+sb.charAt(sb.length()-1);
while(sb.length() != 3){
sb.append(s);
}
}
//4단계
if(sb.length() != 0){
if(sb.charAt(0)=='.') sb.deleteCharAt(0);
}
if(sb.length() != 0){
if(sb.charAt(sb.length()-1)=='.') sb.deleteCharAt(sb.length()-1);
}
return sb.toString();
}
}
코드 설명
각 단계별로 적어 놓았다.
요약
- 정규식으로 더 쉽게 푸는 방법이 있다.
정규식을 잘 이용한 코드
import java.util.*;
class Solution {
public String solution(String new_id) {
//1단계
new_id = new_id.toLowerCase();
//2단계
new_id = new_id.replaceAll("[^a-z0-9-_.]","");
new_id = new_id.replaceAll("[.]{2,}",".");//3단계
new_id = new_id.replaceAll("^[.]|[.]$","");//4단계
StringBuilder sb = new StringBuilder(new_id);
//5단계
if(sb.length() == 0) sb.append("a");
//6단계
if(sb.length() >= 16) sb.delete(15,sb.length());
//7단계
if(sb.length() <= 2){
String s = ""+sb.charAt(sb.length()-1);
while(sb.length() != 3){
sb.append(s);
}
}
new_id = sb.toString();
new_id = new_id.replaceAll("^[.]|[.]$","");//4단계
return new_id;
}
}
정규식
- []괄호 밖의 ^는 시작부분, $는 끝부분
- []괄호 안의 ^는 이후문자를 제외한다
- 2단계 a-z,0-9,-,_,. 을 제외한 나머지를 공백으로 바꾼다.
- {n,}는 앞 표현식이 n번 이상 일치하면이다. {n}은 n번 일치이다.