2016-03-15 10 views
9

पहले int करने के लिए स्ट्रिंग परिवर्तित करने के लिए, मैं 'Groovy String to int' सवाल के बारे में पता कर रहा हूँ और यह प्रतिक्रियाओं है। मैं ग्रोवी भाषा के लिए एक नया हूँ और अभी कुछ मूल बातें खेल रहा हूं। सबसे सरल तरीके int करने के लिए स्ट्रिंग परिवर्तित करने के लिए होने लगते हैं:कैसे ग्रूवी में सही तरीके से सब से

int value = "99".toInteger() 

या:

int value = Integer.parseInt("99") 

ये दोनों काम करते हैं, लेकिन इन उत्तरों के लिए टिप्पणियों मुझे उलझन में मिल गया। ग्रोवी दस्तावेज में बताए गए अनुसार पहली विधि

String.toInteger()
को बहिष्कृत किया गया है। मैं भी मान लेते हैं कि

Integer.parseInt()
कोर जावा सुविधा का उपयोग करता।

तो मेरा सवाल है: क्या कोई कानूनी, शुद्ध ग्रोवी तरीका स्ट्रिंग को एक int में कनवर्ट करने के लिए इतना आसान कार्य करने के लिए है?

+2

'String.toInteger' पदावनत नहीं है, यह सिर्फ था (एक स्ट्रिंग एक CharSequence है) –

+0

धन्यवाद @tim_yates 'CharSequence' में ले जाया गया, लेकिन के अनुसार http://docs.groovy-lang.org/latest/html/gapi/org/codehaus/groovy/runtime/DefaultGroovyMethods.html# toInteger (java.lang.CharSequence) मुझे लगता है कि CharSequence संस्करण भी बहिष्कृत है। हालांकि, मैं अब देखते हैं java.lang.Number के लिए है कि संस्करण का विरोध नहीं है, लेकिन जब मेरे स्ट्रिंग एक संख्या ... – koto

+0

हाँ, यह आंतरिक डॉक्स है बन यह मेरे लिए अब स्पष्ट है। यही कारण है कि विधि का, पदावनत के रूप में यह एक dfferent वर्ग के लिए चले गए ... इंटरफ़ेस डॉक्स यहां हैं: http://docs.groovy-lang.org/latest/html/groovy-jdk/java/lang/CharSequence.html#toInteger () –

उत्तर

19

मैं गलत हो सकता है, लेकिन मैं सबसे grooviest तरह से एक सुरक्षित डाली "123" as int का उपयोग करेंगे लगता है।

वास्तव में आप थोड़ा अलग व्यवहार के साथ तरीके का एक बहुत कुछ है, और सभी सही हैं।

"100" as Integer // can throw NumberFormatException 
"100" as int // throws error when string is null. can throw NumberFormatException 
"10".toInteger() // can throw NumberFormatException and NullPointerException 
Integer.parseInt("10") // can throw NumberFormatException (for null too) 

यदि आप अपवाद के बजाय शून्य प्राप्त करना चाहते हैं, तो आपके द्वारा लिंक किए गए उत्तर से नुस्खा का उपयोग करें।

def toIntOrNull = { it?.isInteger() ? it.toInteger() : null } 
assert 100 == toIntOrNull("100") 
assert null == toIntOrNull(null) 
assert null == toIntOrNull("abcd") 
+0

मैं इस सवाल का जवाब स्वीकार किए जाते हैं, लेकिन मैं इसे वोट नहीं कर सकते हैं क्योंकि मैं पर्याप्त प्रतिनिधि नहीं है ... – koto

+0

अब मैं मतदान कर सकता है :) – koto

+1

StackOverflow पर सफल शुरुआत के साथ बधाई @koto! =) – Seagull

0

आप एक स्ट्रिंग जो एक गणित अभिव्यक्ति, न सिर्फ एक संख्या है परिवर्तित करने के लिए चाहते हैं, groovy.lang.Script.evaluate(String expression) कोशिश:

print evaluate("1+1"); // note that evalute can throw CompilationFailedException 
+2

यह थोड़ा ऑफटॉपिक लगता है, क्योंकि ओपी ने स्ट्रिंग को int में कनवर्ट करने के सरल तरीके के बारे में पूछा था। किसी भी तरह के मूल्यांकन सुरक्षा समस्याओं का एक बहुत खुल जाता है। इसके अलावा, स्क्रिप्ट # मूल्यांकन आप क्या सुझाव है कि ऐसा करने के लिए जिस तरह से अनुशंसित नहीं है, लेकिन [groovy.util.Eval] (http://docs.groovy-lang.org/latest/html/api/groovy/util/Eval। एचटीएमएल) है। – Seagull

संबंधित मुद्दे