코딩테스트

[프로그래머스/Java] 신규 아이디 추천 (문자열 활용 여러가지)

데메즈 2026. 7. 6. 20:43
반응형

https://school.programmers.co.kr/learn/courses/30/lessons/72410

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

1. 정규식 : 알파벳 소문자, 숫자 특정 문자 빼고 다 지워라 => ( [^  ] )

^ 기호가 대괄호[] 안에 들어가면 '제외하고(not)' 라는 뜻이 된다.

answer = answer.replaceAll("[^a-z0-9-_.]", "");

 

2. 정규식 : 특정 문자가 연속으로 반복되면 하나로 줄여라 ( + )

+ 기호는 앞의 문자가 '1번 이상 연속으로 등장' 할 때를 의미한다.

 

단, 마침표(.) 같은 특수문자는 정규식에서 특별한 의미 (모든 문자)를 갖기 때문에,

순수한 마침표 기호로 인식하려면 앞에 백슬래시 2개 (\\) 를 붙여야 한다.

answer = answer.replaceAll("\\.", ".");

 

3. 정규식 : 숫자만 다 지워라 또는 문자만 다 지워라

[0-9] : 모든 숫자

[a-zA-Z] : 모든 대소문자 알파벳

answer = answer.replaceAll("[0-9]", "");

 

4. 정규식 : 공백(띄어쓰기)을 전부 지우거나 다른 걸로 바꿔라 ( \\s )

\\s : 공백, 탭, 줄바꿈 등 모든 공백 문자

answer = answer.replaceAll("\\s", "");

 

5. charAt(index) : 그 위치에 있는 문자를 반환

Java에서 문자열은 0번부터 시작하는 배열 형태

 

6. substring()

- substring(beginIndex) : beginIndex부터 문자열 맨 끝까지 자르기

- substring(beginIndex, endIndex) : beginIndex부터 endIndex-1 까지 자름

 

7. 대소문자 변환

toLowerCase() : 모든 대문자를 소문자로 변환

toUpperCase() : 모든 소문자를 대문자로 변환

answer = answer.toLowerCase();

 

8. 문자열 포함 여부 확인

contains() : 결과값을 true 또는 false 로 반환

String email = "test@naver.com";
if (email.contains("naver")) {
    System.out.println("네이버 메일입니다."); // 출력됨
}

 

9. 문자열 교체

replace(기존, 바꿀문자) : 일반적인 문자열 매칭 치환

replaceAll(정규식, 바꿀문자) : 정슈 표현식을 사용할 수 있는 치환

 

10. 문자열 분리

split() : 특정 문자열을 잘라 배열로 만들어준다

String DynamicArray = "사과,바나나,포도";
String[] fruits = DynamicArray.split(","); // 쉼표를 기준으로 자름

System.out.println(fruits[0]); // 출력: 사과
System.out.println(fruits[1]); // 출력: 바나나

 

11. 앞뒤 공백 제거

trim() : 문자열의 맨앞과 맨뒤에 있는 쓸데없는 공백(띄어쓰기, 줄바꿈)을 지워준다

글 사이에 있는 공백은 지우지 않는다

 

12. 문자열 길이 확인 : length()

배열의 길이 : arr.length

문자열의 길이 : str.length()

 

class Solution {
    public String solution(String new_id) {
        // 1. 모든 대문자는 소문자로
        String answer = new_id.toLowerCase();
        
        // 2. 알파벳, 숫자, -, _, .을 제외한 모든 문자 제거
        answer = answer.replaceAll("[^a-z0-9-_.]","");
        
        // 3. 마침표가 2번 이상 연속된 부분은 1개로 치환
        answer = answer.replaceAll("\\.+", ".");
        
        // 4. 마침표가 처음이나 끝에 있을 경우 제거
        if(answer.length()>0 && answer.charAt(0) == '.'){
            answer = answer.substring(1);
        }
        if(answer.length()>0 && answer.charAt(answer.length()-1) == '.'){
            answer = answer.substring(0, answer.length()-1);
        }
        
        // 5. 빈 문자열이라면, a를 대입
        if(answer.length() == 0)
            answer = "a";
        
        // 6. 길이가 16이상이면 처음 15문자 제외하고 제거
        if(answer.length() > 15){
            answer = answer.substring(0, 15);
            if(answer.charAt(answer.length()-1) == '.'){
                answer = answer.substring(0, answer.length()-1);
            }
        }
        
        //7. 길이가 2이하이면 길이가 3이 될 때까지 마지막 문자 반복
        while(answer.length() < 3){
            answer += answer.charAt(answer.length()-1);
        }
        
        
        return answer;
    }
}
반응형