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"는 단일 백슬래시를 얻기 위한 이스케이프 시퀀스입니다.따라서,\\d
java 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로 전송하시겠습니까?
아니요. 자바에서는matches
method(질문에서 지정된)는 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
'programing' 카테고리의 다른 글
Java에서 "final" 키워드는 어떻게 작동합니까?(오브젝트를 변경할 수 있습니다. (0) | 2022.07.10 |
---|---|
Java에서 파일에서 줄 바꿈을 제거하려면 어떻게 해야 합니까? (0) | 2022.07.10 |
Vue.js Axios 삭제 방법 어레이에서 잘못된 개체 삭제 (0) | 2022.07.10 |
Vue.js - "속성 또는 메서드가 정의되어 있지 않습니다"에 대한 v-.js (0) | 2022.07.10 |
x264 C API를 사용하여 일련의 이미지를 H264로 인코딩하려면 어떻게 해야 합니까? (0) | 2022.07.06 |