package level1;
import java.util.ArrayList;
public class 신규아이디추천 {
public static String solution(String new_id) {
String answer = "";
int tmp = -2;
//1단계 소문자만
new_id = new_id.toLowerCase();
char[] c = new_id.toCharArray();
ArrayList<Character> list = new ArrayList<>();
for (Character i : c) list.add(i);
//2단계 소문자, 숫자, -, _, . 만
for (int i = 0; i < list.size(); i++) {
boolean flag = false;
//if ('a' <= list.get(i) && 'z' >= list.get(i) ) flag = true;
if(Character.isLowerCase(list.get(i)) == true) flag = true;
else if('0' <= list.get(i) && '9'>= list.get(i)) flag =true;
else if('-' == list.get(i) || '_' == list.get(i)) flag = true;
//3단계 중복된 . 제거
else if('.' == list.get(i)) {
flag = true;
if( ++tmp == i) {
list.remove(i);
tmp = --i;
}else tmp = i;
}
if(flag == false) {
list.remove(i);
i--;
}
}
//4단계 처음과 끝이 . 이면 제거,
if(list.get(0)=='.') list.remove(0);
else if(list.get(list.size()-1)=='.') list.remove(list.size()-1);
//5단계 빈문자열 a
if(list.isEmpty()) list.add('a');
//6단계 문자 15개만
while (list.size()> 15) list.remove(list.size()-1);
if(list.get(list.size()-1)=='.') list.remove(list.size()-1);
//7단계
while (list.size()<3) list.add(list.get(list.size()-1));
for (Character i : list)
answer += Character.toString(i);
return answer;
}
public static void main(String[] args) {
System.out.println(solution("...!@BaT#*..y.abcdefghijklm"));
System.out.println(solution("z-+.^."));
System.out.println(solution("=.="));
System.out.println(solution("123_.def"));
System.out.println(solution("abcdefghijklmn.p"));
}
}
class Solution {
public String solution(String new_id) {
String answer = "";
String temp = new_id.toLowerCase();
temp = temp.replaceAll("[^-_.a-z0-9]",""); //-_. 영문자 숫자 아니면 제거
temp = temp.replaceAll("[.]{2,}","."); // . 이 두개 이상일 때 .
temp = temp.replaceAll("^[.]|[.]$",""); //처음과 끝이 . 일 때 제거
if(temp.equals(""))
temp+="a";
if(temp.length() >=16){
temp = temp.substring(0,15);
temp=temp.replaceAll("[.]$",""); //끝이 . 이면 제거
}
if(temp.length()<=2)
while(temp.length()<3)
temp+=temp.charAt(temp.length()-1);
answer=temp;
return answer;
}
}
[문자] 문자와 일치하는지
[^문자] 문자를 제외함을 의미
^[문자] 는 문자의 첫시작을 의미
[문자]$ 문자의 끝을 의미
X{n} X가 정확히 n번 나옴
X{n, } X가 n번 이상 나옴
X{n,m} X가 n번 이상 m번 이하 나옴
https://doorisopen.github.io/developers-library/Java/2020-07-01-java-regular-expression