220610 TIL

Yeoni·2022년 6월 12일
0

국비교육TIL

목록 보기
8/41

국비교육 8일차 JAVA : 유효성 검사, 대문자/소문자/숫자/특수문자 글자 수 세기

1. 비밀번호 유효성 검사 만들기

  • 데이터를 올바르게 입력받아왔는지 확인하는 것 : 유효성검사
  • 비밀번호는 대문자, 소문자, 숫자, 특수기호가 혼합된 8글자 이상 15글자 이하여야 한다.
public static boolean checkPwd(String pwd) { 	// static으로 해주는 것은 인스턴스를 만들 필요 없이 객체를 이용하기 위해서.
		
	boolean upperFlag = false; 		// 대문자인지 기록하는 용도
	boolean lowerFlag = false;    	// 소문자인지 기록하는 용도
	boolean digitFlag = false;		// 숫자인지 기록하는 용도
	boolean specialFlag = false;	// 특수문자인지 기록하는 용도 
		
	int pwd_length = pwd.length(); 	// 비밀번호의 글자 수
		
	if(pwd_length < 8 || pwd_length > 15) {
		return false; 		// 위에가 둘 다 참이라서 글자 수가 맞지 않는다면 false를 return 해줘서 다시 입력하라는 문구 출력
	} // end of if pwd_length
	else { 			// 비밀번호의 글자수가 8글자 이상 15글자 이하인 경우
					// 암호가 어떤 글자로 이루어졌는지 검사를 시도해야 한다. 
			
//	pwd   ==> "Qwert1234!"
//	index ==>  012345678
		for(int i=0; i<pwd_length; i++) { 			// 입력받은 글자의 길이 만큼 검사를 해야한다. 
				
			char ch = pwd.charAt(i); 				// pwd 입력한거에서 순서대로 한글자씩 받아와 줌. 이 경우 i는 0에서 8까지 하나씩 받아와 줌. 
														// charAt : 한글자만 선택해서 char로 변환
				if( Character.isUpperCase(ch) ) { 		// 대문자라면 
					upperFlag = true;
					}
				else if( Character.isLowerCase(ch) ) { 	// 소문자라면
					lowerFlag = true;
					}
				else if( Character.isDigit(ch) ) {		// 숫자라면
					digitFlag = true;
					}
				else {									// 특수문자인 경우
					specialFlag = true;
					}
				
		} // end of for 
			
		if( upperFlag && lowerFlag && digitFlag && specialFlag ) { 	
			return true;								// for문에서 4개 다 true라면 true return
		}
		else {
			return false;
		}
			
	} // end of else
		
} // end of boolean checkPwd
  • 생성한 유효성 검사 메소드 사용
for(;;) {
	System.out.print("2. 비밀번호 : ");
	String pwd = sc.nextLine();
			
	if( pwd.trim().isEmpty() ) { 		// 텅 비었니?
		System.out.println("[경고] 비밀번호를 올바르게 입력하세요.\n");
			}
	else {
		if( MyUtil.checkPwd(pwd) ) { // 예 > Qwert1234! 와 같이 올바르게 입력해주면 true
			this.pwd = pwd; 		 // 올바르게 넣었으면 비밀번호 넣어주렴.
			break; 				  	 // for문 탈출!
				} 
		else { 						 // 예 > qwer1234! 와 같이 조건에 맞지 않는다면?
			System.out.println("[경고] 암호는 대문자, 소문자, 숫자, 특수기호가 혼합된 8글자 이상 15글자 이하여야 합니다.\n");
		} // end of else 
	} // end of else 1
} // end of for pwd

2. 글자수 세기

  • Abz3Sa0#$T 의 글자수, 대문자 개수, 소문자 개수, 숫자 개수, 특수문자 개수 구하기
public static void main(String[] args) {

		String word = "Abz3Sa0#$T"; 
				
		int word_length = word.length();
		int upperCnt = 0; 		// 초기화를 해야함.
		int lowerCnt = 0;
		int digitCnt = 0;
		int specialCnt = 0;
		
		
		for (int i=0; i< word_length; i++ ) { 		
			char ch = word.charAt(i);
			if( Character.isUpperCase(ch) ) {
				upperCnt++; 	// 3
			} 
			else if( Character.isLowerCase(ch) ) {
				lowerCnt++; 	// 3
			}
			else if( Character.isDigit(ch)) {
				digitCnt++; 	// 2
			}
			else {
				specialCnt++; 	//2
			}
		} // end of for
		
		
		System.out.println(word + "\n"
							+ "전체 길이 : " + word_length + "\n"
							+ "대문자 개수 : " + upperCnt + "\n"
							+ "소문자 개수 : " + lowerCnt + "\n"
							+ "숫자 개수 : " + digitCnt + "\n"
							+ "특수문자 개수 : " + specialCnt + "\n");
		
		
		/*
		 	Abz3Sa0#$T
		 	전체 길이 : 10
		 	대문자 개수 : 3
		 	소문자 개수 : 3
		 	숫자 개수 : 2
		 	특수문자 개수 : 2
		 */
		
		
	} // end of public static void main(String[] args)
profile
이런 저런 기록들

0개의 댓글