https://school.programmers.co.kr/learn/courses/30/lessons/72410
이 문제는 정규식을 모르기 때문에 실패했다.
이 문제를 통해서 몇 가지 새롭게 안 사실과 잘못된 사용법에 대해서 정리한다.
String의 toLowerCase()
숫자,영문,특수문자 중에서 대문자만 골라서 소문자로 변경한다.
처음에는 영문을 분리하는 작업을 해야하나 고민했는데
저 메서드 자체가 영문만 골라서 소문자로 바꿔준다.
정규 표현식 (제외와 처음을 헷갈리지 말자)
String에서는 ==아닌 equals()
String의 변수는 참조형 변수이기 때문에 값이 저장되는게 아니라 그 값의 주소가 저장된다. 따라서 ==이 아니라 equals를 이용할 것!
import java.util.*;
import java.io.*;
class Solution {
public String solution(String new_id) {
//new_id 1이상 1000이하
//1단계
new_id = new_id.toLowerCase();
//2단계
new_id = new_id.replaceAll("[^a-z0-9-_.]", "");
//3단계
new_id = new_id.replaceAll("[.]{2,}", ".");
//4단계
new_id = new_id.replaceAll("^[.]|[.]$", "");
//5단계
if(new_id.equals("")) new_id="a";
//6단계
if(new_id.length()>15){
new_id=new_id.substring(0,15);
new_id = new_id.replaceAll("[.]$", "");
}
//7단계
if(new_id.length()<=2){
String final_s = new_id.charAt(new_id.length()-1)+"";
while(new_id.length()<3){
new_id=new_id+final_s;
}
}
String answer = new_id;
return answer;
}
}