Java에서 문자열이 정수인지 확인
문자열 배열의 특정 항목이 정수인지 확인하려고 합니다.
는 ~라고 합니다..split(" ")
에 인픽스 표현을 쓰고 있다.String
형식에서 생성된 배열을 두 개의 배열로 분할합니다.하나는 정수, 다른 하나는 연산자, 그리고 괄호 및 기타 항목은 폐기합니다.를를위 위장 ?장 ?? ?? ???
가 찾을 수 것 Integer.isInteger(String arg)
방법이나 뭐 그런 건 있지만 그런 운은 없어요
가장 간단한 방법은 String을 반복하여 모든 요소가 지정된 기수에 대해 유효한 자리수인지 확인하는 것입니다.각 요소를 한 번 이상 살펴봐야 하므로 이 방법은 최대한 효율적입니다.기수를 기준으로 미세 최적화할 수 있을 것 같습니다만, 어디까지나 이것은 기대 이상의 것입니다.
public static boolean isInteger(String s) {
return isInteger(s,10);
}
public static boolean isInteger(String s, int radix) {
if(s.isEmpty()) return false;
for(int i = 0; i < s.length(); i++) {
if(i == 0 && s.charAt(i) == '-') {
if(s.length() == 1) return false;
else continue;
}
if(Character.digit(s.charAt(i),radix) < 0) return false;
}
return true;
}
또는 Java 라이브러리를 사용하여 이 기능을 사용할 수도 있습니다.이는 예외 기반은 아니며 생각할 수 있는 모든 오류 상태를 탐지합니다.비용이 조금 더 들 것입니다(Scanner 객체를 만들어야 합니다.이것은 매우 엄격한 루프에서는 하고 싶지 않습니다).그러나 일반적으로 너무 많은 비용이 들지는 않기 때문에 일상 업무에서는 상당히 안정적입니다.
public static boolean isInteger(String s, int radix) {
Scanner sc = new Scanner(s.trim());
if(!sc.hasNextInt(radix)) return false;
// we know it starts with a valid int, now make sure
// there's nothing left!
sc.nextInt(radix);
return !sc.hasNext();
}
베스트 프랙티스가 문제가 되지 않거나 코드 리뷰 담당자를 트롤하고 싶은 경우는, 사이즈를 확인해 주세요.
public static boolean isInteger(String s) {
try {
Integer.parseInt(s);
} catch(NumberFormatException e) {
return false;
} catch(NullPointerException e) {
return false;
}
// only got here if we didn't return false
return true;
}
정규 표현을 사용하는 것이 좋습니다.
str.matches("-?\\d+");
-? --> negative sign, could have none or one
\\d+ --> one or more digits
은 좋지 않다NumberFormatException
사용할 수 있다면 여기if-statement
★★★★★★ 。
선행 0을 사용하지 않으려면 다음과 같이 정규식을 사용할 수 있습니다.
str.matches("-?(0|[1-9]\\d*)");
또는 Apache Commons의 친한 친구 StringUtils.isNumeric(String Str)에게 도움을 받을 수 있습니다.
또는 간단하게
mystring.matches("\\d+")
그러나 int보다 큰 숫자에 대해서는 true로 반환됩니다.
Integer.parseInt(String) 메서드를 사용합니다.
try{
int num = Integer.parseInt(str);
// is an integer!
} catch (NumberFormatException e) {
// not an integer!
}
하고 캐치하기 NumberFormatException
는 regex 라고을 사용할 수 있습니다
if (Pattern.compile("-?[0-9]+").matches(str)) {
// its an integer
}
특히 regex를 사전 컴파일하여 재사용하는 경우 이 속도가 더 빠를 수 있습니다.
단, 이 접근법의 문제는Integer.parseInt(str)
또한 실패한다.str
법적 범위를 벗어난 숫자를 나타냅니다.int
가치.범위 내의 정수만 일치하는 정규식을 만들 수 있지만Integer.MIN_INT
로.Integer.MAX_INT
(그리고 나는 그것을 시도하지 않을 거야...)
반면에...검증 목적으로 "정수가 아니다"와 "정수가 너무 크다"를 별도로 취급하는 것이 허용될 수 있다.
사용할 수 있습니다.Integer.parseInt(str)
잡아서NumberFormatException
문자열이 유효한 정수가 아닌 경우 다음 방식으로(모든 답변에서 지적됨)
static boolean isInt(String s)
{
try
{ int i = Integer.parseInt(s); return true; }
catch(NumberFormatException er)
{ return false; }
}
단, 평가된 정수가 오버플로우하면 같은 예외가 느려지는 것에 주의해 주십시오.당신의 목적은 그것이 유효한 정수인지 아닌지를 알아내는 것이었습니다.따라서 타당성을 확인하는 방법을 직접 만드는 것이 더 안전합니다.
static boolean isInt(String s) // assuming integer is in decimal number system
{
for(int a=0;a<s.length();a++)
{
if(a==0 && s.charAt(a) == '-') continue;
if( !Character.isDigit(s.charAt(a)) ) return false;
}
return true;
}
사용할 수 있습니다.Integer.parseInt()
또는Integer.valueOf()
문자열에서 정수를 가져와 해석 가능한 int가 아닌 경우 예외를 포착합니다.꼭 잡으시고 싶으시다면NumberFormatException
던질 수 있어요.
valueOf()는 원시 int가 아닌 Integer 개체를 반환한다는 점에 유의하십시오.
public boolean isInt(String str){
return (str.lastIndexOf("-") == 0 && !str.equals("-0")) ? str.substring(1).matches(
"\\d+") : str.matches("\\d+");
}
언급URL : https://stackoverflow.com/questions/5439529/determine-if-a-string-is-an-integer-in-java
'source' 카테고리의 다른 글
C의 단일 구조 부재 크기 (0) | 2022.08.10 |
---|---|
Java에서 데몬 스레드란 무엇입니까? (0) | 2022.08.10 |
vuex.disc 글로벌오류 핸들러 상태 (0) | 2022.08.10 |
상수 포인터 vs 상수 포인터 (0) | 2022.08.10 |
표면과 텍스처의 차이(SDL/일반) (0) | 2022.08.10 |