ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [자바(JAVA)] 문자열 다루기 기본 (삼항연산자, matches, 정규식)
    카테고리 없음 2023. 6. 17. 09:56
    728x90

     

     

    ✅ 내 풀이

    class Solution {
        public boolean solution(String s) {
            return ((s.length() == 4 || s.length()==6) && s.matches("[0-9]+"));
        }
    }

    1.  길이판별 

    2. 문자열에 0~9까지만 있는지 판별(matches)

     

    💬matches() 
    문자열이 정규식과 일치하는지 여부를 확인하는 데 사용되는 메서드입니다. 정규식은 특정한 패턴을 표현하는 문자열 패턴입니다.
    matches() 메서드는 주어진 문자열이 정규식과 완전히 일치하는지를 검사합니다. 즉, 주어진 문자열 전체가 정규식과 일치해야 true 를 반환하고,
    그렇지 않으면 false 를 반환합니다.

     

     

     

     

     

     

    🔽 정규식이 아닌 조사방법

    // 문자열을 하나씩 순회하며 검사하는 방법
    
    class Solution {
        public boolean containsOnlyDigits(String str) {
            for (char ch : str.toCharArray()) {
                if (!Character.isDigit(ch)) {
                    return false;
                }
            }
            return true;
        }
    }

     

    - toCharArray()

    문자열을 char형 배열로 저장한다.

     

    - Character.isDigit

    문자가 숫자인지 판별한다.

     

     

    💬Character.isDigit()

    주어진 문자가 숫자인지 여부를 확인하는 데 사용되는 메서드입니다. 이 메서드는 char 타입의 인수를 받아 해당 문자가 0부터 9까지의 숫자인지를 검사합니다.
    isDigit() 메서드는 주어진 문자가 숫자로 해석될 수 있는 경우 true 를 반환하고,
    그렇지 않으면 false 를 반환합니다.

    isDigit() 는 다음과 같은 범위의 숫자를 인식합니다:    
          ◼ '0'부터 '9'까지의 숫자 문자 (ASCII 코드 48부터 57까지)

    isDigit()는 다른 유형의 숫자를 인식하지 않습니다. 예를 들어, 유니코드 숫자(예: 로마 숫자, 아라비아 숫자 이외의 문자로 표현된 숫자)는 isDigit()에서 false를 반환합니다. 또한, 소수점이나 지수 표기법으로 표현된 숫자도 인식하지 않습니다.
    따라서, isDigit() 메서드는 숫자의 범위를 제한적으로 인식하므로 모든 숫자를 확인하기 위해서는 추가적인 조건을 사용해야 할 수 있습니다.

     

     

     


    정규식이란?

    문자열에서 특정 패턴을 찾거나 일치하는 문자열을 검색하기 위해 사용되는 표현 방식이다.

    특정 규칙을 가진 문자열의 패턴을 기술하며, 주로 문자열 검색, 치환, 유효성 검사등 다양한 문자열 작업에 사용된다.

     

    • . (마침표): 임의의 한 문자와 대응됩니다.
    • * (별표): 앞의 표현식이 0번 이상 반복되는 것과 대응됩니다.
    • + (더하기): 앞의 표현식이 1번 이상 반복되는 것과 대응됩니다.
    • ? (물음표): 앞의 표현식이 0번 또는 1번 나타나는 것과 대응됩니다.
    • [...] (문자 클래스): 괄호 안에 나열된 문자 중 하나와 대응됩니다.
    • ^ (시작): 문자열의 시작을 나타내는 역할입니다.
    • [^...] (부정 문자 클래스): 괄호 안에 나열되지 않은 문자 중 하나와 대응됩니다.
    • $(끝): 문자열의 끝을 나타내며 이 위치까지 검사를 완료해야 합니다.
    • \d (숫자): 0부터 9까지의 숫자와 대응됩니다.
    • \w (단어 문자): 알파벳 대소문자, 숫자, 밑줄 문자와 대응됩니다.

     

    정규식은 위와 같은 메타문자와 문자 클래스를 조합하여 복잡한 패턴을 기술할 수 있습니다. 예를 들어, \d{3}-\d{4}는 세 자리 숫자, 하이픈(-), 그리고 네 자리 숫자로 이루어진 형식을 나타낸다.
    Java에서는 정규식을 사용하기 위해 java.util.regex 패키지의 Pattern 클래스와 Matcher 클래스를 제공합니다. Pattern 클래스는 정규식 패턴을 컴파일하고, Matcher 클래스는 주어진 문자열에서 패턴을 검색하고 일치하는 결과를 반환한다.

     

    정규식은 강력하고 유연한 문자열 처리 도구이지만, 학습 곡선이 있고 복잡한 패턴의 경우 이해하기 어려울 수 있습니다. 정규식을 사용할 때는 패턴을 잘 이해하고, 테스트와 디버깅을 통해 원하는 결과를 얻을 수 있도록 해야한다.

     

     

    ✅ 모두 정규식을 사용했을 떄

    class Solution {
        public boolean solution(String s) {
            return s.matches("\\d{4}|\\d{6}");
        }
    }

     

     

     

    정규식 \\d{4}|\\d{6}는 다음을 의미합니다:

    \\d: 숫자에 대응합니다.
    {4}: 앞의 표현식이 4번 연속으로 나타나는 것과 대응합니다.
    |: OR 연산자로, 왼쪽 또는 오른쪽 표현식 중 하나와 일치하는 것과 대응합니다.

    따라서 \\d{4}|\\d{6}는 네 자리 숫자 또는 여섯 자리 숫자와 일치하는지 검사합니다.

    이렇게 표현된 정규식을 String 클래스의 matches() 메소드에 전달하여 문자열이 정규식과 일치하는지 확인할 수 있습니다.

     

     

     

     

    📌 {} 안에 숫자를 넣으면 그 숫자만큼의 반복을 의미함.

    다음은 중괄호 {}를 사용한 몇 가지 예시입니다:

    - {n}: 앞의 표현식이 n번 연속으로 나타나는 것과 대응합니다.
    예시: \d{3}는 세 자리 숫자와 일치합니다.
    - {n,}: 앞의 표현식이 적어도 n번 이상 연속으로 나타나는 것과 대응합니다.
    예시: \d{2,}는 두 자리 이상의 숫자와 일치합니다.
    - {n,m}: 앞의 표현식이 최소 n번 이상 최대 m번 이하로 연속으로 나타나는 것과 대응합니다.예시: \d{2,4}는 두 자리에서 네 자리까지의 숫자와 일치합니다.

    따라서 {4}는 앞의 표현식이 4번 연속으로 나타나는 것과 대응하며, {4,}는 앞의 표현식이 4번 이상 연속으로 나타나는 것과 대응합니다. {} 안에 있는 숫자를 조정하여 반복 횟수를 제어할 수 있습니다.
    728x90
Designed by Tistory.