https://school.programmers.co.kr/learn/courses/30/lessons/72410
class Solution {
public String solution(String new_id) {
String answer = "";
answer = new_id.toLowerCase();
answer = answer.replaceAll("[^a-z0-9_.-]", "");
answer = answer.replaceAll("[.]+", ".");
answer = answer.replaceAll("^[.]|[.]$", "");
if (answer.equals("")) {
answer = answer.replaceAll(" ", "a");
}
if (answer.length() >= 16) {
answer = answer.substring(0, 15);
answer = answer.replaceAll("[.]$", "");
}
if (answer.length() <= 2) {
for (int i = 0; i < 3; i++) {
char lastChar = answer.charAt(answer.length() - 1);
answer = answer + lastChar;
}
}
return answer;
}
}
에러발생
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1
if (answer.length() <= 2) {
for (int i = 0; i < 3; i++) {
char lastChar = answer.charAt(answer.length() - 1);
answer = answer + lastChar;
}
}
이 부분에 모순을 찾게 되어 다시 시도했다.
if (answer.length() <= 2) {
while(answer.length()!=3) {
char lastChar = answer.charAt(answer.length() - 1);
answer = answer + lastChar;
}
}
여전히 같은 에러
if (answer.equals("")) {
answer += "a";
}
에러 해결
public String solution(String new_id) {
String answer = "";
answer = new_id.toLowerCase();
answer = answer.replaceAll("[^-_.a-z0-9]", "");
answer = answer.replaceAll("[.]{2,}", ".");//[.]+
answer = answer.replaceAll("^[.]|[.]$", "");
if (answer.equals("")) {
answer += "a";
}
if (answer.length() >= 16) {
answer = answer.substring(0, 15);
answer = answer.replaceAll("[.]$", "");
}
if (answer.length() <= 2) {
while(answer.length()!=3) {
char lastChar = answer.charAt(answer.length() - 1);
answer = answer + lastChar;
}
}
System.out.println(answer);
return answer;
}
정규식으로 하드코드를 하지 않았지만 실행속도가 17이상되는부분이 많다.
속도 면에서.. 하드코어를 하는게 맞나 싶다..
class Solution {
public String solution(String new_id) {
String answer;
// 1단계
String step1 = new_id.toLowerCase();
// 2단계
char[] step1_arr = step1.toCharArray();
StringBuilder step2 = new StringBuilder();
for (char c : step1_arr) {
if ((c >= 'a' && c <= 'z') || (c >= '0' && c <= '9') || c == '-' || c == '_' || c == '.') {
step2.append(c);
}
}
// 3단계
String step3 = step2.toString().replace("..", ".");
while (step3.contains("..")) {
step3 = step3.replace("..", ".");
}
// 4단계
String step4 = step3;
if (step4.length() > 0) {
if (step4.charAt(0) == '.') {
step4 = step4.substring(1, step4.length());
}
}
if (step4.length() > 0) {
if (step4.charAt(step4.length() - 1) == '.') {
step4 = step4.substring(0, step4.length() - 1);
}
}
// 5단계
String step5 = step4;
if (step5.equals("")) {
step5 = "a";
}
// 6단계
String step6 = step5;
if (step6.length() >= 16) {
step6 = step6.substring(0, 15);
if (step6.charAt(step6.length() - 1) == '.') {
step6 = step6.substring(0, step6.length() - 1);
}
}
// 7단계
StringBuilder step7 = new StringBuilder(step6);
if (step7.length() <= 2) {
char last = step7.charAt(step7.length() - 1);
while (step7.length() < 3) {
step7.append(last);
}
}
answer = String.valueOf(step7);
return answer;
}
}
엄청빠르다... 나랑은 극과극