230324 데일리코딩

허크·2023년 3월 24일
0

문자열 내부 임의의 문자열

반복문으로 푸는 경우

int len = str.length();
// 길이 5미만은 처음부터 false로 출력하여 불필요한 계산 방지
if (len < 5) {
	return false;
    }
// index 0부터 문장끝나기 전 5글자까지 순회하면서
for (int i = 0; i <= len - 5; i++) {
	// 대소문자 구분하지 않게 전부 소문자로 처리하고
	String lowerStr = str.toLowerCase();
	char c1 = lowerStr.charAt(i);
    char c2 = lowerStr.charAt(i + 4);
	// 조건에 부합하면 true
    if (c1 == 'a' && c2 == 'b') {
    return true;
	}
	if (c1 == 'b' && c2 == 'a') {
    return true;
	}
}
// 그외는 false로 출력
return false;

정규식으로 푸는 경우

return str.matches("(?i)^(.*a...b.*|.*b...a.*)$");
  • matches() : 현재 문자열이 주어진 정규 표현식과 일치하는지 검사
  • 사용된 정규식 문법
    • (?i) : 정규식 내에서 대소문자를 구분하지 않음을 나타내는 플래그
    • ^ : 문자열의 시작
    • .* : 임의의 문자가 0개 이상 나오는 문자열
    • a...b : 'a'와 'b' 사이에 3개의 임의의 문자가 나오는 문자열
    • | : 논리합
    • b...a : 'b'와 'a' 사이에 3개의 임의의 문자가 나오는 문자열
    • $ : 문자열의 끝
profile
codestates seb 44th // 다크모드로 보는걸 추천드립니다

0개의 댓글