https://school.programmers.co.kr/learn/courses/30/lessons/72410
String 관련 함수
- substring(시작 인덱스, 포함할 인덱스 + 1)
문자열의 인덱스는 0~문자열의 길이 -1 이다
예) 0~3번까지 문자열을 자르고 싶으면 substring(0,4)- replace(바꿔야되는 문자열 , 변경 후 문자열)
- replaceAll(바꿔야되는 문자열, 변경 후 문자열)
- 대,소문자 변경 : toUpperCase() , toLowerCase()
🔔 replace 와 replcaeAll 의 차이점(짱 중요!)
String replace(CharSequnce target, CharSequence replacement)
String replaceAll(String regex, String replacement)
- replace는 보다시피 charSequnce로 받지만 replaceAll은 정규식을 받는다.
- 즉, replace는 특수문자를 문자열로 인식하지만 replaceAll은 정규식으로 인식한다. 정규식에서 .은 모든 문자를 의미한다.
- replaceAll 정규식으로 사용할때:
replaceAll("[해당 문자들을]","이 문자로 변환함")
replaceAll("[^해당 문자들을 제외하고]","이 문자로 변환함")
replaceAll과 replace의 차이점을 생각하지 못했다. 이로 인해 잘못된 값이 나오는데 이유를 몰라서 한참 헤맸다..부들부들
import java.util.*;
class Solution {
public String solution(String new_id) {
//1단계
String answer = new_id.toLowerCase();
//2단계
answer = answer.replaceAll("[^-._0-9a-z]","");
//3단계
while(answer.contains("..")){
answer=answer.replace("..", ".");
}
//4단계
if(answer.length()>0){
if(answer.charAt(0)=='.')
answer=answer.substring(1,answer.length());
}
if(answer.length()>0){
if(answer.charAt(answer.length()-1)=='.')
answer=answer.substring(0,answer.length()-1);
}
//5단계
if(answer.length()==0)
answer+='a';
//6단계
if(answer.length()>=16){
answer=answer.substring(0,15);
if(answer.charAt(answer.length()-1)=='.')
answer=answer.substring(0,14);
}
//7단계
if(answer.length()<=2){
while(answer.length()<3){
answer+=answer.charAt(answer.length()-1);
}
}
return answer;
}
}
정규식을 단계마다 사용해서 코드길이를 확 줄이는 것도 가능하다.
근데 그냥 내가 푸는 방식으로 풀어보고 싶었다.
코딩 특 : 사소한 실수 하나로 시간 낭비할때마다 현타옴 ㅎ