Double.parseDouble()
으로 문자열을 구문 분석 할 수 있는지 확인하는 고유 한 방법이 있습니까?문자열이 double에 대해 parseable인지 확인하는 방법은 무엇입니까?
답변
일반적인 접근 방식은 그것이 또한 Double.valueOf(String)
문서 내부의 제안처럼 정규 표현식을 확인하는 것입니다.
거기에 제공된 (또는 아래에 포함 된) regexp는 모든 유효한 부동 소수점 케이스를 포함해야하므로, 더 미세한 포인트를 놓치게 될 것이기 때문에이를 연습 할 필요가 없습니다.
원하지 않는 경우 try catch
은 계속 선택할 수 있습니다.
JavaDoc을 제안 정규 표현식은 아래에 포함되어 있습니다 : 다음과 같은
final String Digits = "(\\p{Digit}+)";
final String HexDigits = "(\\p{XDigit}+)";
// an exponent is 'e' or 'E' followed by an optionally
// signed decimal integer.
final String Exp = "[eE][+-]?"+Digits;
final String fpRegex =
("[\\x00-\\x20]*"+ // Optional leading "whitespace"
"[+-]?(" + // Optional sign character
"NaN|" + // "NaN" string
"Infinity|" + // "Infinity" string
// A decimal floating-point string representing a finite positive
// number without a leading sign has at most five basic pieces:
// Digits . Digits ExponentPart FloatTypeSuffix
//
// Since this method allows integer-only strings as input
// in addition to strings of floating-point literals, the
// two sub-patterns below are simplifications of the grammar
// productions from the Java Language Specification, 2nd
// edition, section 3.10.2.
// Digits ._opt Digits_opt ExponentPart_opt FloatTypeSuffix_opt
"((("+Digits+"(\\.)?("+Digits+"?)("+Exp+")?)|"+
// . Digits ExponentPart_opt FloatTypeSuffix_opt
"(\\.("+Digits+")("+Exp+")?)|"+
// Hexadecimal strings
"((" +
// 0[xX] HexDigits ._opt BinaryExponent FloatTypeSuffix_opt
"(0[xX]" + HexDigits + "(\\.)?)|" +
// 0[xX] HexDigits_opt . HexDigits BinaryExponent FloatTypeSuffix_opt
"(0[xX]" + HexDigits + "?(\\.)" + HexDigits + ")" +
")[pP][+-]?" + Digits + "))" +
"[fFdD]?))" +
"[\\x00-\\x20]*");// Optional trailing "whitespace"
if (Pattern.matches(fpRegex, myString)){
Double.valueOf(myString); // Will not throw NumberFormatException
} else {
// Perform suitable alternative action
}
Double.parseDouble()은 try catch 블록으로 래핑 할 수 있습니다.
try
{
Double.parseDouble(number);
}
catch(NumberFormatException e)
{
//not a double
}
뭔가가 충분합니다 : -
String decimalPattern = "([0-9]*)\\.([0-9]*)";
String number="20.00";
boolean match = Pattern.matches(decimalPattern, number);
System.out.println(match); //if true then decimal else not
아파치는, 평소와 같이,의 형태로 Apache Commons-Lang에서 좋은 답변을 가지고 org.apache.commons.lang3.math.NumberUtils.isNumber(String)
null을 처리 할 때, try
/catch
블록이 필요하지 않습니다.
Apache는 일반적인 JDK와 함께 제공됩니까? –
아니요. Apache Commons 라이브러리는 여기에서 찾을 수 있습니다. http://commons.apache.org/ 가능할 때마다 사용자 지정 코드를 작성하는 대신 사용하는 것이 좋습니다. –
10 진수를 식별합니까? – TechCrunch
당신이 원하는 학업 수준에 따라 모든 대답은 정상입니다.
private static final Pattern DOUBLE_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]*");
public static boolean isFloat(String s)
{
return DOUBLE_PATTERN.matcher(s).matches();
}
이 코드는 Double에 JavaDoc을 기반으로 : 정확하게 자바 사양을 준수하고자하는 경우 다음 사용합니다.
Google의 Guava 라이브러리는 Doubles.tryParse(String)
이라는 유용한 도우미 메소드를 제공합니다. Double.parseDouble
과 같이 사용하지만 문자열이 double로 구문 분석되지 않으면 예외를 throw하는 것이 아니라 null
을 반환합니다.
- 1. 문자열이 숫자인지 확인하는 방법은 무엇입니까?
- 2. 문자열이 이미 URL로 인코딩되었는지 확인하는 방법은 무엇입니까?
- 3. 문자열이 객체의 인스턴스 변수인지 확인하는 방법은 무엇입니까?
- 4. 문자열이 mysql에 대해 역 슬래시인지 확인하는 함수
- 5. 쿼리 문자열이 int인지 확인하는 최적의 방법은 무엇입니까?
- 6. 문자열이 차지하는 픽셀 수를 확인하는 방법은 무엇입니까?
- 7. 영어가 아닌 문자열이 대문자인지 확인하는 방법은 무엇입니까?
- 8. Ruby : 문자열이 유효한 시간인지 확인하는 방법은 무엇입니까?
- 9. .NET에서 문자열이 숫자인지 확인하는 방법은 무엇입니까?
- 10. URL에 대해 프록시를 확인하는 방법은 무엇입니까?
- 11. 입력 문자열이 유효한 VB 문자열인지 확인하는 방법은 무엇입니까?
- 12. python에서 문자열이 전자 메일인지 정수인지를 확인하는 가장 빠른 방법은 무엇입니까?
- 13. 두 문자열이 다른 경우 가장 효율적으로 확인하는 방법은 무엇입니까?
- 14. PHP에서 주어진 문자열이 실제 URL인지 확인하는 방법은 무엇입니까?
- 15. PHP에서 배열 내에 문자열이 있는지 확인하는 방법은 무엇입니까?
- 16. C에서 문자열이 다른 문자열로 시작하는지 확인하는 방법은 무엇입니까?
- 17. 문자열이 Delphi를 사용하는 유효한 Windows 폴더 이름인지 확인하는 방법은 무엇입니까?
- 18. iPhone : 문자열에 하위 문자열이 있는지 확인하는 방법은 무엇입니까?
- 19. JavaScript 문자열이 바뀝니다. 일치하는 항목이 있는지 확인하는 방법은 무엇입니까?
- 20. PHP 다른 문자열에 utf-8 문자열이 있는지 확인하는 방법은 무엇입니까?
- 21. Linq를 사용하여이 문자열이 (컬렉션의) 값으로 끝나는 지 확인하는 방법은 무엇입니까?
- 22. uri 문자열이 유효한지 확인하는 방법
- 23. double에 소수점 이하 n 자리가 있는지 확인하는 방법?
- 24. 문자열이 C#의 숫자인지 확인하는 방법
- 25. Emacs Lisp에서 문자열이 비어 있는지 확인하는 방법?
- 26. 문자열이 올바른지 확인하는 방법 JSON?
- 27. 주어진 파일 형식에 대해 셸 동사가 등록되었는지 확인하는 방법은 무엇입니까?
- 28. 주어진 템플릿에 대해 템플릿을 컴파일하지 * 않는지 확인하는 방법은 무엇입니까?
- 29. ASP.NET 구성원 데이터베이스에 대해 수동으로 사용자를 확인하는 방법은 무엇입니까?
- 30. CoInitializeSecurity가 프로세스에 대해 이미 호출되었는지 확인하는 방법은 무엇입니까?
+1 - 예외를 잡는 것보다 훨씬 낫다. (내 절름발이 답 ...) – Starkey
정확히 어떻게하나요? –
@Louis Rhys - 답변의 문서 링크에 코드 예제가 있습니다. – Starkey