क्या कोई स्ट्रिंग Double.parseDouble()
के साथ पर्स करने योग्य है यह जांचने के लिए कोई मूल तरीका है (अधिमानतः अपनी विधि को कार्यान्वित किए बिना)?यह जांचने के लिए कि एक स्ट्रिंग एक डबल के लिए पारदर्शी है?
उत्तर
आम तरीका एक नियमित अभिव्यक्ति के साथ यह जाँच करने के लिए की तरह यह भी Double.valueOf(String)
प्रलेखन के अंदर सुझाव दिया है किया जाएगा।
वहां प्रदान किए गए रेगेक्सप (या नीचे शामिल) में सभी मान्य फ़्लोटिंग पॉइंट मामलों को शामिल करना चाहिए, इसलिए आपको इसके साथ परेशान करने की आवश्यकता नहीं है, क्योंकि आप अंततः कुछ बेहतर बिंदुओं पर ध्यान नहीं देंगे।
यदि आप ऐसा नहीं करना चाहते हैं, तो try catch
अभी भी एक विकल्प है।
regexp 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
{
Double.parseDouble(number);
}
catch(NumberFormatException e)
{
//not a double
}
यह मेरी पसंदीदा विधि होगी क्योंकि आपको पार्स के समान व्यवहार करने की गारंटी है। किनारे के मामलों को नजरअंदाज करने के लिए कस्टम नियमित अभिव्यक्ति के साथ यह बहुत आसान है। –
यह अच्छा है अगर आप किसी स्थान के बाद किसी स्थान पर टाइप करते हैं, तो यह इसे पकड़ नहीं लेता है। – giant91
@ giant91 - बस संख्या को ट्रिम करें: 'number.trim()'। – 26hmkk
कुछ नीचे की तरह पर्याप्त होना चाहिए: -
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)
नल को संभालता है, try
/catch
ब्लॉक आवश्यक है।
सामान्य जेडीके के साथ अपाचे जहाज करता है? –
नहीं। आप यहां अपाचे कॉमन्स लाइब्रेरी पा सकते हैं। http://commons.apache.org/ जब भी आप कर सकते हैं कस्टम कोड लिखने के बजाय आप उनका अत्यधिक अनुशंसा करते हैं। –
क्या यह दशमलव संख्या की पहचान करता है? – 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 पर Javadocs पर आधारित है: आप सही रूप में जावा विनिर्देशों का पालन करना चाहते हैं, तो निम्न का उपयोग करें।
Google की गुवा लाइब्रेरी ऐसा करने के लिए एक अच्छी सहायक विधि प्रदान करती है: Doubles.tryParse(String)
। आप इसे Double.parseDouble
जैसे उपयोग करते हैं, लेकिन यदि स्ट्रिंग दो बार नहीं पाती है तो अपवाद फेंकने के बजाय यह null
लौटाता है।
- 1. यह जांचने के लिए कि एक यूरी स्ट्रिंग मान्य है
- 2. यह जांचने के लिए कि कोई स्ट्रिंग एक विशिष्ट पैटर्न
- 3. यह जांचने के लिए कि कोई int एक शून्य है
- 4. यह जांचने के लिए कि java.lang.reflect.Type एक Enum
- 5. यह जांचने के लिए क्वेरी कि एक MYSQL तालिका
- 6. यह जांचने के लिए कि कोई ऑब्जेक्ट एक निश्चित प्रकार
- 7. यह जांचने के लिए कि क्या चरित्र एक पूर्णांक
- 8. यह जांचने के लिए कि क्या ऑब्जेक्ट जेएसओएन स्ट्रिंग
- 9. यह जांचने के लिए कि बैश स्क्रिप्ट
- 10. यह जांचने के लिए कि जावास्क्रिप्ट सरणी
- 11. यह जांचने के लिए कि .NET 4.0
- 12. यह जांचने के लिए कि वर्डप्रेस
- 13. यह जांचने के लिए कि क्या PKAddPassesViewController
- 14. यह जांचने के लिए कि फ़ाइल
- 15. यह सत्यापित करने के लिए कि एक स्ट्रिंग में सी #
- 16. यह जांचने के लिए कि कोई चर एक संख्या या स्ट्रिंग है या नहीं?
- 17. यह जांचने के लिए कि .NET में कोई स्ट्रिंग एक संख्या है या नहीं?
- 18. यह जांचने के लिए कि कोई स्ट्रिंग एक अद्वितीय पहचानकर्ता है या नहीं?
- 19. यह जांचने के लिए कि क्या XMLHttpRequest भेजता है() फ़ाइल
- 20. यह जांचने के लिए कि कोई चर एक स्ट्रिंग या किसी अन्य स्ट्रिंग के बराबर है या नहीं?
- 21. यह जांचने के लिए अभिनव तरीका है कि हस्ताक्षर int
- 22. जावा स्ट्रिंग यह जांचने के लिए कि क्या स्ट्रिंग पैंडिंड्रोम है
- 23. यह जांचने के लिए कि फ़ाइल बाइनरी है या नहीं?
- 24. यह जांचने के लिए कि क्या गिट स्थापित है .bashrc
- 25. यह जांचने के लिए कि JCheckBox चेक किया गया है?
- 26. यह जांचने के लिए कि कोई एफ़टीपी निर्देशिका मौजूद है
- 27. यह जांचने के लिए कि क्या GUID शून्य है
- 28. यह जांचने के लिए कि सत्र मौजूद है या नहीं?
- 29. यह जांचने के लिए क्वेरी कि कॉलम शून्य है
- 30. क्या स्ट्रिंग वैरिएबल एक संख्या मान है या नहीं, यह जांचने के लिए कोई फ़ंक्शन है?
+1 - अपवाद को पकड़ने से काफी बेहतर (मेरा लंगड़ा जवाब ...) – Starkey
कोई यह कैसे करता है? –
@ लुइस Rhys - उत्तर में प्रलेखन लिंक में एक कोड उदाहरण है। – Starkey