programing

Java에서 문자열에 숫자만 포함되어 있는지 확인하는 방법

javaba 2022. 7. 10. 11:19
반응형

Java에서 문자열에 숫자만 포함되어 있는지 확인하는 방법

Java for String 클래스에는 matches라는 메서드가 있습니다.이 메서드를 사용하여 정규 표현을 사용하여 문자열이 숫자만 있는지 여부를 확인하는 방법입니다.아래 예시로 시도했지만 둘 다 false로 반환되었습니다.

String regex = "[0-9]";
String data = "23343453";
System.out.println(data.matches(regex));

String regex = "^[0-9]";
String data = "23343453";
System.out.println(data.matches(regex));

해라

String regex = "[0-9]+";

또는

String regex = "\\d+";

Java 정규 표현에 따르면+'1회 또는 여러 번'을 의미한다.\d는 "숫자"를 의미합니다.

주의: "double backslash"는 단일 백슬래시를 얻기 위한 이스케이프 시퀀스입니다.따라서,\\djava String을 사용하면 실제 결과를 얻을 수 있습니다.\d

참고 자료:


편집: 다른 답변이 혼동을 일으켜 테스트 케이스를 작성 중입니다.자세한 것은 이쪽에서 설명하겠습니다.

먼저 이 솔루션(또는 다른 솔루션)의 정확성이 의심될 경우 다음 테스트 케이스를 실행하십시오.

String regex = "\\d+";

// positive test cases, should all be "true"
System.out.println("1".matches(regex));
System.out.println("12345".matches(regex));
System.out.println("123456789".matches(regex));

// negative test cases, should all be "false"
System.out.println("".matches(regex));
System.out.println("foo".matches(regex));
System.out.println("aa123bb".matches(regex));

질문 1:

추가할 필요가 있지 않은가?^그리고.$"aa123bb"와 일치하지 않도록 regex로 전송하시겠습니까?

아니요. 자바에서는matchesmethod(질문에서 지정된)는 fragment가 아닌 완전한 문자열과 일치합니다.다시 말해, 다음을 사용할 필요가 없습니다.^\\d+$(그것도 맞지만)마지막 네거티브 테스트 케이스를 참조해 주세요.

온라인의 「regex 체커」를 사용하는 경우는, 동작이 다를 수 있습니다.Java에서 문자열의 fragment를 대조하려면find대신 메서드(여기서 자세히 설명:

Java Regex의 matches()와 find()의 차이

질문 2:

이 정규식도 빈 문자열과 일치하지 않을까요?""?*

아니요. 정규식\\d*빈 문자열과 일치하지만\\d+하지 않다.*0 이상입니다만, 플러스(+)+1개 또는 여러 개를 의미합니다.첫 번째 네거티브 테스트 케이스를 참조해 주세요.

질문 3

regex 패턴을 컴파일하는 것이 더 빠르지 않나요?

네. 실제로 정규식 패턴을 한 번 컴파일하는 것이 모든 호출보다 빠릅니다.matches퍼포먼스가 중요한 경우에는Pattern는 다음과 같이 컴파일하여 사용할 수 있습니다.

Pattern pattern = Pattern.compile(regex);
System.out.println(pattern.matcher("1").matches());
System.out.println(pattern.matcher("12345").matches());
System.out.println(pattern.matcher("123456789").matches());

Apache Commons에서 NumberUtil.isNumber(String str)를 사용할 수도 있습니다.

정규 표현을 사용하는 것은 성능 면에서 비용이 많이 듭니다.문자열을 긴 값으로 해석하려고 하면 비효율적이고 신뢰할 수 없으며 필요한 값이 아닐 수 있습니다.

각 문자가 숫자인지 확인하고 Java 8 lambda 식을 사용하여 무엇을 효율적으로 수행할 수 있는지 확인하는 것이 좋습니다.

boolean isNumeric = someString.chars().allMatch(x -> Character.isDigit(x));

아직 공개되지 않은 솔루션이 하나 더 있습니다.

String regex = "\\p{Digit}+"; // uses POSIX character class

보다 많은 .+서명)의 예를 나타냅니다.

String regex = "[0-9]+"; 
String data = "23343453"; 
System.out.println(data.matches(regex));
Long.parseLong(data)

예외로 잡으면 마이너스 기호가 처리됩니다.

자릿수는 제한되지만 실제로 사용할 수 있는 데이터 변수가 생성됩니다. 즉, 가장 일반적인 사용 사례입니다.

이든 쓸 수요.Pattern.compile("[0-9]+.[0-9]+") ★★★★★★★★★★★★★★★★★」Pattern.compile("\\d+.\\d+")같은 뜻을 가지고 있습니다.

패턴 [0-9]는 숫자를 의미합니다.'\d'와 같습니다.'+'는 더 많이 표시됨을 의미합니다.'.'는 정수 또는 부동입니다.

다음 코드를 사용해 보십시오.

import java.util.regex.Pattern;

    public class PatternSample {

        public boolean containNumbersOnly(String source){
            boolean result = false;
            Pattern pattern = Pattern.compile("[0-9]+.[0-9]+"); //correct pattern for both float and integer.
            pattern = Pattern.compile("\\d+.\\d+"); //correct pattern for both float and integer.

            result = pattern.matcher(source).matches();
            if(result){
                System.out.println("\"" + source + "\""  + " is a number");
            }else
                System.out.println("\"" + source + "\""  + " is a String");
            return result;
        }

        public static void main(String[] args){
            PatternSample obj = new PatternSample();
            obj.containNumbersOnly("123456.a");
            obj.containNumbersOnly("123456 ");
            obj.containNumbersOnly("123456");
            obj.containNumbersOnly("0123456.0");
            obj.containNumbersOnly("0123456a.0");
        }

    }

출력:

"123456.a" is a String
"123456 " is a String
"123456" is a number
"0123456.0" is a number
"0123456a.0" is a String

Oracle Java 문서에 따르면:

private static final Pattern NUMBER_PATTERN = Pattern.compile(
        "[\\x00-\\x20]*[+-]?(NaN|Infinity|((((\\p{Digit}+)(\\.)?((\\p{Digit}+)?)" +
        "([eE][+-]?(\\p{Digit}+))?)|(\\.((\\p{Digit}+))([eE][+-]?(\\p{Digit}+))?)|" +
        "(((0[xX](\\p{XDigit}+)(\\.)?)|(0[xX](\\p{XDigit}+)?(\\.)(\\p{XDigit}+)))" +
        "[pP][+-]?(\\p{Digit}+)))[fFdD]?))[\\x00-\\x20]*");
boolean isNumber(String s){
return NUMBER_PATTERN.matcher(s).matches()
}
        In Java for String class, there is a method called matches with help of this method you can validate the regex expression along with your string.





 String regex = "^[\\d]{4}$";
    
 String value="1234";

 System.out.println(data.matches(value));


  **The Explanation for the above regex expression is:-**

'^' - 정규식 시작을 나타냅니다.

'[]' - 이 안에는 자신의 상태를 설명해야 합니다.

'\\d' - 숫자만 사용할 수 있습니다.괄호 안에서는 '\d' 또는 0-9를 사용할 수 있습니다.

{4} - 이 조건에서는 정확히 4자리를 사용할 수 있습니다.필요에 따라 번호를 변경할 수 있습니다.

$ - regex 식의 끝을 나타냅니다.

참고: {4}을(를) 제거하고 하나 이상의 숫자를 의미하는 '+' 또는 0 이상의 숫자를 의미하는 '*' 또는 한 번 또는 없음을 의미하는 '?'을 지정할 수 있습니다.

자세한 것은, 다음의 Web 사이트를 참조해 주세요.https://www.rexegg.com/regex-quickstart.html

코드의 다음 부분을 사용해 보십시오.

void containsOnlyNumbers(String str)
{
    try {
        Integer num = Integer.valueOf(str);
        System.out.println("is a number");
    } catch (NumberFormatException e) {
        // TODO: handle exception
        System.out.println("is not a number");
    }

}

언급URL : https://stackoverflow.com/questions/15111420/how-to-check-if-a-string-contains-only-digits-in-java

반응형