[プログラマー]新しいアイデンティティの推奨-Java





プログラマーは文字列に関連する良い問題に遭遇した.
文字列を加工する上で、正規表現を知るのは便利です.
与えられた問題から,アイデンティティ生成の次の7つのステップにより,ルールの正しいアイデンティティを生成する.
手順1 newidのすべての大文字を対応する小文字に変換します.
ステップ2 new idでは、小文字、数字、マイナス記号(-)、下線()および句点(.)以外のすべての文字を削除します.
ステップ3 new idのピリオド(.)1つのポイント(.)に置き換えます.
ステップ4 new idのピリオド(.)先頭または末尾にある場合は削除します.
ステップ5 new idが空の文字列の場合、new idに「a」を挿入します.
ステップ6 new idの長さが16文字を超える場合、new idの最初の15文字以外のすべての他の文字を削除します.
削除後のピリオド(.)new idの末尾にある場合、終了記号(.)テキストを削除します.
ステップ7のnew idの長さが2文字未満の場合、new idの長さが3になるまで、new idの最後の文字を最後に繰り返し貼り付けます.
次の正規表現を使用して実現できます.
class Solution {
    public String solution(String new_id) {
        String str = new_id;
        //1
        // 소문자 변환
		str = str.toLowerCase();
        
        //2
		// * : 앞문자가 없을 수도, 무한정 많을수도 있음
		// ^ : 영어 소문자, 숫자, -  _  .  문자 제외한 모든 문자 제거
        // \\ : 특정 문자를 뽑아 매칭시킬때 사용
		str = str.replaceAll("[^a-z0-9\\-_.]*","");

        //3
		// 횟수 또는 범위를 나타내는 {2} 2회이상 연속되면 . 으로 치환
		str = str.replaceAll("\\.{2,}", ".");
        
        //4
		// ^ : 문자시작, | : 이거나 , [.]$ : 문자열 끝이  
        // ([.] 첫문자나 끝이 . 으로 끝나면 제거)
		str = str.replaceAll("^[.]|[.]$", "");
            
        //5
        if("".equals(str)) {
        	str = "a";
        }
         
        //6
        // 문자길이는 15자 까지며, 제거 후 마침표가 양 끝에 있으면 제거
        if(str.length() > 15) {
        	str = str.substring(0 , 15);
            str = str.replaceAll("^[.]|[.]$", "");
        }
        
        //7
        // 길이가 2자 이하면, 마지막 문자를 붙여서 길이가 3이 될 때까지 반복
        if(str.length() < 3) {
        	while(str.length() < 3) {
        		//str += str.substring(str.length()-1);
        		str = str.concat(str.substring(str.length()-1));
        	}
        }

        return str;
    }
}