Groovy में int के लिए एक स्ट्रिंग परिवर्तित


286

मेरे पास एक Stringपूर्णांक मान का प्रतिनिधित्व करता है और इसे एक में बदलना चाहता है int। क्या जावा के बराबर एक ग्रूवी है Integer.parseInt(String)?


1
सिर्फ डिफॉल्ट कीवर्ड का उपयोग क्यों न करें?
सर्वव्यापी

4
मेरे पास एक स्ट्रिंग पैरामीटर है जिसमें एक पूर्णांक है। यदि मैं बाद में एक int के रूप में उपयोग करता हूं, तो मुझे कक्षा के अपवाद में def = string_parameter परिणाम का उपयोग करना चाहिए।
कू में स्टीव कू

जवाबों:


492

का प्रयोग करें toInteger()एक कन्वर्ट करने के लिए विधि Stringएक करने के लिए Integer, जैसे

int value = "99".toInteger()

एक विकल्प, जो एक पदावनत विधि का उपयोग करने से बचता है (नीचे देखें)

int value = "66" as Integer

यदि आपको यह जांचने की आवश्यकता है कि क्या रूपांतरण, उपयोग करने से पहले इसे परिवर्तित किया String जा सकता है

String number = "66"

if (number.isInteger()) {
  int value = number as Integer
}

पदावनति अद्यतन

ग्रूवी के हाल के संस्करणों में toInteger()विधियों में से एक को हटा दिया गया है। निम्नलिखित org.codehaus.groovy.runtime.StringGroovyMethodsग्रूवी 2.4.4 से लिया गया है

/**
 * Parse a CharSequence into an Integer
 *
 * @param self a CharSequence
 * @return an Integer
 * @since 1.8.2
 */
public static Integer toInteger(CharSequence self) {
    return Integer.valueOf(self.toString().trim());
}

/**
 * @deprecated Use the CharSequence version
 * @see #toInteger(CharSequence)
 */
@Deprecated
public static Integer toInteger(String self) {
    return toInteger((CharSequence) self);
}

आप इस विधि के गैर-पदच्युत संस्करण को जबरदस्ती उपयोग कर सकते हैं जिसे कुछ भयानक जैसा कहा जा सकता है:

int num = ((CharSequence) "66").toInteger()

व्यक्तिगत रूप से, मैं बहुत पसंद करता हूं:

int num = 66 as Integer

19
कैवेट एम्प्टर: आपको isInteger()पहले मूल्य की जांच करने की आवश्यकता है , क्योंकि toInteger()स्ट्रिंग संख्यात्मक नहीं होने पर अपवाद को फेंक देगा। उसी पर लागू होता है toFloat()/isFloat()
एंड्रेस Kievsky

8
में 2.1.6 API दस्तावेज़ isInteger / toInteger पदावनत कर रहे हैं। ऐसा करने के लिए वर्तमान सबसे अच्छा तरीका क्या है?
पाक

1
पूर्णांक paramValue = params.int ('paramName') का उपयोग करना हालांकि सुरक्षित नहीं है। अगर परम मानचित्र में "परमनाम" नाम के साथ कोई परम नहीं है, तो आप एक अपवाद प्राप्त कर सकते हैं जिसके बारे में अशक्त नहीं हो सकता है।
माइकल

2
बस जोड़ना चाहता था, कि जब से Groovy 1.8 intवास्तव में है int। बॉक्सिंग की वजह से ग्रूवी अभी भी इंटेगर क्लास को प्रदर्शित करेगा, लेकिन आप उदाहरण के लिए ए nullको असाइन नहीं कर पाएंगे int, जो कि 1.0 में संभव था। हमने परिवर्तन को गैर-महत्वपूर्ण माना है, क्योंकि आप पहले से ही एक प्रकार की विधि कॉल पैरामीटर के लिए तर्क के रूप में अशक्त का उपयोग नहीं कर सकते हैं int। यह सभी जावा से अलग है, जैसा कि जावा में आप एक साधारण असाइनमेंट द्वारा इंटीजर को लॉन्ग में परिवर्तित नहीं कर सकते हैं या एक लॉन्ग के साथ एक इंट ले लेने का तरीका नहीं कह सकते हैं।
12

1
@pakman StringGroovyMethods.isInteger(String)और के DefaultGroovyMethods.isInteger(CharSequence)पक्ष में पदावनत किया जाता है StringGroovyMethods.isInteger(CharSequence)। उसी के लिए जाता है toInteger()
बेमपिन

67

इसे करने के कई तरीके, यह मेरा पसंदीदा है:

def number = '123' as int

10
उपरोक्त के रूप में समान समस्या, यह एक अपवाद फेंक देगा यदि स्ट्रिंग एक संख्या नहीं है। isInteger()पहले से जाँच करें ।
एंड्रेस कीवस्की

12
@ एक प्रश्न के बराबर के लिए कहा जाता है, Integer.parseInt(String)जो एक अपवाद भी फेंकता है अगर स्ट्रिंग एक संख्या नहीं है, तो प्रश्न दिया, मैं इसे "समस्या" नहीं मानता
Dónal

30

के परिशिष्ट के रूप डॉन का जवाब ही नहीं, ग्रूवी एक जोड़ता है .toInteger()करने के लिए विधि Stringहै, यह भी कहते हैं toBigDecimal(), toBigInteger(), toBoolean(), toCharacter(), toDouble(), toFloat(), toList(), और toLong()

एक ही नस में, groovy is*उन सभी में eqivalents भी जोड़ता है जो trueयदि Stringप्रश्न में हैं तो प्रश्न में प्रारूप में पार्स किया जा सकता है।

प्रासंगिक GDK पृष्ठ यहां है।


8
यह सही उत्तर है - पहले जांच करें isInteger(), फिर करें toInteger()... अर्थात, जब तक आप try/ a catchब्लॉक नहीं जोड़ेंगे :) लेकिन इसके लिए अपवादों का उपयोग करना एक बुरा विचार है।
एंड्रेस कीवस्की

2
@anktastic मैं तर्क देता हूं कि मेरा उत्तर अधिक सही है क्योंकि प्रश्न "जावा के इंटेगर.परसेनटेंट (स्ट्रिंग)" के एक ग्रोवी समकक्ष के लिए पूछा गया है, अर्थात एक अनियंत्रित रूपांतरण
Dónal

25

मुझे यकीन नहीं है कि अगर इसे ग्रूवी के हाल के संस्करणों में पेश किया गया था (प्रारंभिक उत्तर काफी पुराना है), लेकिन अब आप इसका उपयोग कर सकते हैं:

def num = mystring?.isInteger() ? mystring.toInteger() : null

या

def num = mystring?.isFloat() ? mystring.toFloat() : null

मैं फ़्लोट्स का उपयोग करने की सलाह देता हूं या यहां तक ​​कि मामले में पूर्णांक के बजाय डबल्स प्रदान करता हूं अगर प्रदान की गई स्ट्रिंग अविश्वसनीय है।


2
+1 सबसे अच्छा समाधान IMO क्योंकि इसमें रूपांतरण से पहले टाइप चेक के अलावा नल की जांच शामिल है
kaskelotti

मैं फ़्लोट्स या डबल्स का उपयोग करने के खिलाफ सलाह देता हूं क्योंकि वे स्वाभाविक रूप से गलत हैं। जैसा कि ग्रूवी बिगडेसीमल्स को किसी भी अन्य नंबर के रूप में आसान बनाता है, यदि आपको एक इंटीजर की तुलना में अधिक सटीकता की आवश्यकता है, तो इसका उपयोग करें। दूसरे, यह दृष्टिकोण सुरक्षित लगता है, लेकिन परिणाम यह संख्या == शून्य हो सकता है, इसलिए आपको इससे सावधान रहने की जरूरत है
हंस बोगार्ड्स

पहले नमूना कोड के लिए, मुझे लगता है कि आप mystring.toInteger()इसके बजाय लिखना चाहते थे mystring.toFloat()। तो def num = mystring?.isInteger() ? mystring.toInteger() : nullसही होगा।
Sk8erPeter

15

खैर, Groovy जावा फॉर्म को ठीक स्वीकार करता है। यदि आप पूछ रहे हैं कि क्या कोई ग्रोवियर रास्ता है, तो जाने के लिए एक रास्ता है Integer

दोनों यहां दिखाए गए हैं:

String s = "99"
assert 99 == Integer.parseInt(s)
Integer i = s as Integer
assert 99 == i

5
यह उत्तर तब भी फेंकता है जब स्ट्रिंग संख्यात्मक न हो - बाहर देखो!
एंड्रेस कीवस्की

6

भी आप स्थैतिक आयात कर सकते हैं

import static java.lang.Integer.parseInt as asInteger

और इस उपयोग के बाद

String s = "99"
asInteger(s)

नीट, मैं छोटी चीजों के बारे में बहुत कुछ भूल जाता हूं।
मैजिक ऑक्टोपस Urn


2

इसे प्राप्त करने के कई तरीके। उदाहरण नीचे दिए गए हैं

a. return "22".toInteger()
b. if("22".isInteger()) return "22".toInteger()
c. return "22" as Integer()
d. return Integer.parseInt("22")

उम्मीद है की यह मदद करेगा


1
यह 8 मौजूदा जवाबों में पहले से मौजूद सवाल पर कुछ भी कैसे जोड़ रहा है?
ल्यूक

मेरा बुरा, यहाँ थोड़ा लालची हो गया
डार्थ शेखर



0

यहाँ एक और तरीका है। अगर आपको अपवाद पसंद नहीं हैं।

def strnumber = "100"
def intValue = strnumber.isInteger() ?  (strnumber as int) : null

मुझे लगता है कि यह रूप में एक ही जवाब है # 16877253 द्वारा @Shmaperator
MarkHu

0

उपयोग करने का तरीका अभी भी Inteteger () होना चाहिए, क्योंकि यह वास्तव में पदावनत नहीं है।

int value = '99'.toInteger()

स्ट्रिंग संस्करण को हटा दिया गया है, लेकिन CharSequence एक इंटरफ़ेस है जो स्ट्रिंग लागू करता है। इसलिए, स्ट्रिंग का उपयोग करना ठीक है, क्योंकि आपका कोड तब भी काम करेगा, जब विधि केवल CharSequence के साथ काम करेगी। उसी के लिए जाता है ()

संदर्भ के लिए यह प्रश्न देखें: स्ट्रिंग को चारसेंसेंस में कैसे बदलें?

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


-1

ग्रूवी में एक स्ट्रिंग को प्रस्तुत करने का सरल तरीका निम्नानुसार है ...

String aa="25"
int i= aa.toInteger()

अब "मैं" पूर्णांक मूल्य धारण करता है।


4
यह मौजूदा उत्तरों में क्या जोड़ता है? स्वीकृत जवाब 9 साल पहले पोस्ट किया गया था: " toInteger()कनवर्ट करने के लिए विधि का उपयोग करें ...
डिफ़ॉल्ट लोकेल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.