जवाबों:
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
String एक इसी विस्तार विधि है:
"10".toLong()
Stringका विस्तार कार्य और toLong()साथ ही toInt()अन्य भी हैं। आप इनका उपयोग कर सकते हैं। हो सकता है कि @ilya वर्तमान Kotlin को यह जवाब अद्यतन कर सकते हैं (निकालें jet.Stringसंदर्भ।)
विस्तार विधियाँ Stringअन्य आदिम प्रकारों में उन्हें पार्स करने के लिए उपलब्ध हैं । नीचे दिए गए उदाहरण:
str.toLongOrNull()और इसी तरह से नामित तरीके भी उपयोगी हैं यदि आप गारंटी नहीं दे सकते हैं कि इनपुट सही ढंग से स्वरूपित किया जाएगा। इसके साथ आप सामान कर सकते हैं जैसेstr.toLongOrNull()?.let { doSomethingWith(it) } ?: println("Please input a number")
नोट: उल्लेख करने वाले उत्तर jet.Stringपुराने हैं। यहाँ वर्तमान कोटलीन (1.0) है:
Stringकोटलिन में किसी के पास पहले से ही एक एक्सटेंशन फ़ंक्शन है जिसे आप कॉल कर सकते हैं toLong()। कुछ विशेष की जरूरत नहीं है, बस इसका उपयोग करें।
के लिए सभी विस्तार कार्यString प्रलेखित हैं। आप एपीआई संदर्भ में मानक काम के लिए दूसरों को पा सकते हैं
यह दिलचस्प है। इस तरह कोड:
val num = java.lang.Long.valueOf("2");
println(num);
println(num is kotlin.Long);
यह उत्पादन करता है:
2
true
मुझे लगता है, कोटलिन इस मामले में स्वचालित रूप से java.lang.Longऔर लंबे आदिम से रूपांतरण करता है kotlin.Long। तो, यह समाधान है, लेकिन मुझे java.lang पैकेज के उपयोग के बिना टूल को देखकर खुशी होगी।
वास्तव में, 90% समय आपको 'लॉन्ग' की जाँच करने के लिए मान्य है, इसलिए आपको इसकी आवश्यकता है:
"10".toLongOrNull()
बुनियादी प्रकारों में से प्रत्येक के लिए एक 'orNull' है, और ये Kotlin के साथ रखने के साथ अवैध मामलों के प्रबंधन की अनुमति देता है? मुहावरा।
string.toLong ()
stringतुम्हारा चर कहाँ है
एक अच्छा पुराना जावा संभावना है जो उत्तर में वर्णित नहीं है 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
कोटलिन 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
यदि आप NumberFormatExceptionपार्स करते समय संभालना नहीं चाहते हैं
var someLongValue=string.toLongOrNull() ?: 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 |
+—————————————————————————————————————————————+——————————+———————————————————————+