कोटरलिन में स्ट्रिंग को लॉन्ग में कैसे बदलें?


157

तो, जैसे तरीकों की कमी के कारण Long.valueOf(String s)मैं फंस गया हूं।

कोटरलिन में स्ट्रिंग को लॉन्ग में कैसे बदलें?

जवाबों:


153

1। string.toLong()

[लंबी] संख्या के रूप में स्ट्रिंग को पार्स करता है और परिणाम देता है।

यदि संख्या एक वैध संख्या नहीं है तो @throws NumberFormatException।

2। string.toLongOrNull()

स्ट्रिंग को [Long] संख्या के रूप में बताता है और परिणाम देता है या null यदि स्ट्रिंग किसी संख्या का वैध प्रतिनिधित्व नहीं है।

3। str.toLong(10)

[लंबी] संख्या के रूप में स्ट्रिंग को पार्स करता है और परिणाम देता है।

यदि संख्या एक वैध संख्या नहीं है तो @throws NumberFormatException।

@throws IllegalArgumentException जब [मूलांक] स्ट्रिंग से संख्या रूपांतरण के लिए एक मान्य मूलांक नहीं है।

public inline fun String.toLong(radix: Int): Long = java.lang.Long.parseLong(this, checkRadix(radix))

4। string.toLongOrNull(10)

स्ट्रिंग को [Long] संख्या के रूप में बताता है और परिणाम देता है या null यदि स्ट्रिंग किसी संख्या का वैध प्रतिनिधित्व नहीं है।

@throws IllegalArgumentException जब [मूलांक] स्ट्रिंग से संख्या रूपांतरण के लिए एक मान्य मूलांक नहीं है।

public fun String.toLongOrNull(radix: Int): Long? {...}

5। java.lang.Long.valueOf(string)

public static Long valueOf(String s) throws NumberFormatException

1
पलक, एली बॉड
DolDurma

94

String एक इसी विस्तार विधि है:

"10".toLong()

1
कोटलिन में नाम बदल गए हैं, आपको चिंता करने की ज़रूरत नहीं है कि कहाँ या क्यों, बस कोटलिन में पता है कि सभी Stringका विस्तार कार्य और toLong()साथ ही toInt()अन्य भी हैं। आप इनका उपयोग कर सकते हैं। हो सकता है कि @ilya वर्तमान Kotlin को यह जवाब अद्यतन कर सकते हैं (निकालें jet.Stringसंदर्भ।)
जेसन Minard

यदि आप अंकों की एक स्ट्रिंग को पुनरावृत्त कर रहे हैं, तो वे एक शीर्ष पर हैं, वे चार्ट और [char] .toInt () आपको ascii प्रतिनिधित्व देंगे।
पेहजे

58

विस्तार विधियाँ Stringअन्य आदिम प्रकारों में उन्हें पार्स करने के लिए उपलब्ध हैं । नीचे दिए गए उदाहरण:


2
str.toLongOrNull()और इसी तरह से नामित तरीके भी उपयोगी हैं यदि आप गारंटी नहीं दे सकते हैं कि इनपुट सही ढंग से स्वरूपित किया जाएगा। इसके साथ आप सामान कर सकते हैं जैसेstr.toLongOrNull()?.let { doSomethingWith(it) } ?: println("Please input a number")
sotrh

9

नोट: उल्लेख करने वाले उत्तर jet.Stringपुराने हैं। यहाँ वर्तमान कोटलीन (1.0) है:

Stringकोटलिन में किसी के पास पहले से ही एक एक्सटेंशन फ़ंक्शन है जिसे आप कॉल कर सकते हैं toLong()। कुछ विशेष की जरूरत नहीं है, बस इसका उपयोग करें।

के लिए सभी विस्तार कार्यString प्रलेखित हैं। आप एपीआई संदर्भ में मानक काम के लिए दूसरों को पा सकते हैं


7

यह दिलचस्प है। इस तरह कोड:

val num = java.lang.Long.valueOf("2");
println(num);
println(num is kotlin.Long);

यह उत्पादन करता है:

2
true

मुझे लगता है, कोटलिन इस मामले में स्वचालित रूप से java.lang.Longऔर लंबे आदिम से रूपांतरण करता है kotlin.Long। तो, यह समाधान है, लेकिन मुझे java.lang पैकेज के उपयोग के बिना टूल को देखकर खुशी होगी।


6

वास्तव में, 90% समय आपको 'लॉन्ग' की जाँच करने के लिए मान्य है, इसलिए आपको इसकी आवश्यकता है:

"10".toLongOrNull()

बुनियादी प्रकारों में से प्रत्येक के लिए एक 'orNull' है, और ये Kotlin के साथ रखने के साथ अवैध मामलों के प्रबंधन की अनुमति देता है? मुहावरा।


माना। अधिकांश समय .toLongOrNull () है जो आपको चाहिए।
Andrej


0

एक अच्छा पुराना जावा संभावना है जो उत्तर में वर्णित नहीं है java.lang.Long.decode(String)


दशमलव स्ट्रिंग्स:

कोटलिन String.toLong()जावा के समकक्ष है Long.parseLong(String):

स्ट्रिंग तर्क को एक हस्ताक्षरित दशमलव के रूप में लंबा करता है । ... परिणामी दीर्घ मान लौटाया जाता है, ठीक वैसे ही जैसे तर्क और मूलांक 10 को parseLong(java.lang.String, int)विधि के तर्क के रूप में दिया गया था ।


गैर-दशमलव स्ट्रिंग्स:

कोटलिन String.toLong(radix: Int)जावा के ई केLong.parseLong(String, int) बराबर है :

दूसरे तर्क द्वारा निर्दिष्ट मूलांक में हस्ताक्षर किए गए स्ट्रिंग तर्क को लंबे समय तक हस्ताक्षरित करता है। स्ट्रिंग में वर्ण सभी निर्दिष्ट मूलांक के अंक होने चाहिए ...

और यहाँ java.lang.Long.decode(String)चित्र में आता है :

एक स्ट्रिंग एक लंबे समय में। निम्नलिखित व्याकरण द्वारा दिए गए दशमलव, षोडश आधारी और अष्टक संख्याएँ स्वीकार करता है: DecodableString:

(संकेत) दशमूलारिष्ट | (संकेत) 0x हेक्सिडिट्स | (संकेत) 0X HexDigits | (संकेत) # HexDigits | (संकेत) ० अष्टदल

संकेत: - | +

इसका मतलब है कि decodeस्ट्रिंग्स को पार्स कर सकते हैं "0x412", जहां अन्य तरीकों के परिणामस्वरूप ए NumberFormatException

val kotlin_toLong010 = "010".toLong() // 10 as parsed as decimal
val kotlin_toLong10 = "10".toLong() // 10 as parsed as decimal
val java_parseLong010 = java.lang.Long.parseLong("010") // 10 as parsed as decimal
val java_parseLong10 = java.lang.Long.parseLong("10") // 10 as parsed as decimal

val kotlin_toLong010Radix = "010".toLong(8) // 8 as "octal" parsing is forced
val kotlin_toLong10Radix = "10".toLong(8) // 8 as "octal" parsing is forced
val java_parseLong010Radix = java.lang.Long.parseLong("010", 8) // 8 as "octal" parsing is forced
val java_parseLong10Radix = java.lang.Long.parseLong("10", 8) // 8 as "octal" parsing is forced

val java_decode010 = java.lang.Long.decode("010") // 8 as 0 means "octal"
val java_decode10 = java.lang.Long.decode("10") // 10 as parsed as decimal

0

कोटलिन 1.3 में (जो 64-बिट हस्ताक्षरित पूर्णांक का प्रतिनिधित्व करता है) कन्वर्ट करने के Stringलिए Longकाफी सरल है

आप निम्नलिखित तीन विधियों में से किसी का उपयोग कर सकते हैं:

val number1: Long = "789".toLong()
println(number1)                                   // 789

val number2: Long? = "404".toLongOrNull()
println("number = $number2")                       // number = 404

val number3: Long? = "Error404".toLongOrNull()    
println("number = $number3")                       // number = null

val number4: Long? = "111".toLongOrNull(2)
println("numberWithRadix(2) = $number4")           // numberWithRadix(2) = 7

0

यदि आप NumberFormatExceptionपार्स करते समय संभालना नहीं चाहते हैं

 var someLongValue=string.toLongOrNull() ?: 0

0

वास्तव में, कई तरीके हैं:

दिया हुआ:

var numberString : String = "numberString" 
// number is the Long value of numberString (if any)
var defaultValue : Long    = defaultValue

तो हमारे पास हैं:

+—————————————————————————————————————————————+——————————+———————————————————————+
| numberString is a valid number ?            |  true    | false                 |
+—————————————————————————————————————————————+——————————+———————————————————————+
| numberString.toLong()                       |  number  | NumberFormatException |
+—————————————————————————————————————————————+——————————+———————————————————————+
| numberString.toLongOrNull()                 |  number  | null                  |
+—————————————————————————————————————————————+——————————+———————————————————————+
| numberString.toLongOrNull() ?: defaultValue |  number  | defaultValue          |
+—————————————————————————————————————————————+——————————+———————————————————————+

आप कैसे हो सकते हैं defaultValue = Long: defaultValue नंबरस्ट्रीमिंग आपके उदाहरण में कहां उपयोग की जाएगी / मुझे लगता है कि इसे defaultValue = Long: numberString होना चाहिए?
जेम्स स्मिथ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.