프로그래머스 신규 아이디 추천이라는 문제를 풀며 정규표현식의 중요성을 알게 되었다.
실제 코딩테스트에서 검색이 불가능하다면 정규식을 머릿속으로 떠올려야하는데, 정규식을 암기하지 않으면 써먹을 수 없기 때문이다.
정규표현식이란 특정한 규칙을 가진 문자열의 집합을 표현하는데 사용하는 형식 언어
String pt2 = "a.c";
String s = "abc";
String s2 = "ac";
String s3 = "abbbc";
System.out.println(Pattern.matches(pt2, s)); // true
System.out.println(Pattern.matches(pt2, s2)); // false
System.out.println(Pattern.matches(pt2, s3)); // false
x? - x가 존재할 수도, 하지 않을 수도 있음
ex) ab?c : ac, abc
String pt = "ab?c";
String s = "abc";
String s2 = "ac";
String s3 = "abbbc";
System.out.println(Pattern.matches(pt, s)); // true
System.out.println(Pattern.matches(pt, s2)); // true
System.out.println(Pattern.matches(pt, s3)); // false
x|y - x또는 y
한 문자열 내에서 특정 조건에 부합하는 일부를 다른 문자열로 치환하고 싶을 때 replaceAll을 사용한다.
answer = answer.replaceAll("[^-_.a-z0-9]",""); // a~z, A~Z, -, _, . 제외하고 삭제
answer = answer.replaceAll("[.]{2,}","."); //.이 2개 이상이면 .하나로 치환
answer = answer.replaceAll("^[.]|[.]$",""); // .으로 시작하고 .으로 끝나면 .을 제거
정규 표현식의 Pattern클래스의 matches(패턴, 비교할문자열)메서드를 사용하여 해당문자열이 패턴과 일치하는지 확인한다.
import java.util.regex.Pattern;
public class practice {
public static void main(String[] args) {
String pt = "name : [a-zA-Z]+ nickname : [a-zA-z]+";
String s = "name : db nickname : name";
String s2 = "name : dd Nickname : name";
System.out.println(Pattern.matches(pt, s)); // true
System.out.println(Pattern.matches(pt, s2)); // false
}
}
import java.util.*;
import java.io.*;
class Solution {
public String solution(String new_id) {
String answer = "";
new_id = new_id.toLowerCase();
new_id = new_id.replaceAll("[^-_.a-z0-9]","");
new_id = new_id.replaceAll("[.]{2,}",".");
new_id = new_id.replaceAll("^[.]|[.]$","");
System.out.println(new_id);
if(new_id.length()==0) new_id="a";
if(new_id.length()>=16) {
new_id = new_id.substring(0,15);
new_id = new_id.replaceAll("[.]$","");
}
if(new_id.length()<=2){
while(new_id.length()<3){
new_id+=new_id.substring(new_id.length()-1);
}
}
return new_id;
}
}
https://zzang9ha.tistory.com/322
신규아이디 추천 문제
https://programmers.co.kr/learn/courses/30/lessons/72410