ดังนั้นเนื่องจากขาดวิธีการเช่นLong.valueOf(String s)
ฉันติดอยู่
วิธีการแปลงสตริงเป็น Long ใน Kotlin?
ดังนั้นเนื่องจากขาดวิธีการเช่นLong.valueOf(String s)
ฉันติดอยู่
วิธีการแปลงสตริงเป็น Long ใน Kotlin?
คำตอบ:
1 string.toLong()
แยกวิเคราะห์สตริงเป็นหมายเลข [ยาว] และส่งคืนผลลัพธ์
@throws NumberFormatException หากสตริงไม่ใช่ตัวแทนที่ถูกต้องของตัวเลข
2 string.toLongOrNull()
แยกวิเคราะห์สตริงเป็นหมายเลข [ยาว] และส่งคืนผลลัพธ์หรือ
null
ถ้าสตริงไม่ใช่ตัวเลขที่ถูกต้อง
3 str.toLong(10)
แยกวิเคราะห์สตริงเป็นหมายเลข [ยาว] และส่งคืนผลลัพธ์
@throws NumberFormatException หากสตริงไม่ใช่ตัวแทนที่ถูกต้องของตัวเลข
@throws IllegalArgumentException เมื่อ [radix] ไม่ใช่ radix ที่ถูกต้องสำหรับการแปลงสตริงเป็นตัวเลข
public inline fun String.toLong(radix: Int): Long = java.lang.Long.parseLong(this, checkRadix(radix))
4 string.toLongOrNull(10)
แยกวิเคราะห์สตริงเป็นหมายเลข [ยาว] และส่งคืนผลลัพธ์หรือ
null
ถ้าสตริงไม่ใช่ตัวเลขที่ถูกต้อง@throws IllegalArgumentException เมื่อ [radix] ไม่ใช่ radix ที่ถูกต้องสำหรับการแปลงสตริงเป็นตัวเลข
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
s เพื่อแยกพวกเขาเป็นประเภทดั้งเดิมอื่น ๆ ตัวอย่างด้านล่าง:
str.toLongOrNull()
และวิธีการที่มีชื่อคล้ายกันอื่น ๆ ก็มีประโยชน์เช่นกันหากคุณไม่สามารถรับประกันได้ว่ารูปแบบการป้อนข้อมูลจะถูกต้อง ด้วยสิ่งนี้คุณสามารถทำสิ่งต่าง ๆ ได้str.toLongOrNull()?.let { doSomethingWith(it) } ?: println("Please input a number")
หมายเหตุ: คำตอบที่กล่าวถึงjet.String
ล้าสมัยแล้ว นี่คือ Kotlin ปัจจุบัน (1.0):
ทุกคนString
ใน Kotlin มีฟังก์ชั่นเสริมที่คุณสามารถโทรtoLong()
ได้ ไม่จำเป็นต้องใช้อะไรเป็นพิเศษเพียงใช้มัน
ฟังก์ชั่นการขยายString
ทั้งหมดสำหรับมีการบันทึกไว้ คุณสามารถค้นหาคนอื่น ๆ สำหรับ lib มาตรฐานในการอ้างอิง API
มันน่าสนใจ รหัสเช่นนี้:
val num = java.lang.Long.valueOf("2");
println(num);
println(num is kotlin.Long);
ทำให้ผลลัพธ์นี้:
2
true
ฉันเดาว่า Kotlin ทำให้การแปลงจากjava.lang.Long
และเป็นแบบดั้งเดิมไปเป็นแบบkotlin.Long
อัตโนมัติในกรณีนี้ ดังนั้นมันเป็นทางออก แต่ฉันยินดีที่จะเห็นเครื่องมือโดยไม่ต้องใช้แพ็คเกจ java.lang
ที่จริงแล้ว 90% ของเวลาที่คุณต้องตรวจสอบว่า 'ยาว' ถูกต้องดังนั้นคุณต้อง:
"10".toLongOrNull()
มี 'orNull' เทียบเท่าสำหรับ 'toLong' พื้นฐานแต่ละประเภทและอนุญาตให้จัดการกรณีที่ไม่ถูกต้องกับ Kotlin หรือไม่ สำนวน.
string.toLong ()
string
ตัวแปรของคุณอยู่ที่ไหน
หนึ่งที่ดีเป็นไปได้ Java java.lang.Long.decode(String)
เก่าสิ่งที่ไม่ได้กล่าวถึงในคำตอบคือ
สตริงทศนิยม:
Kotlin's String.toLong()
เทียบเท่ากับ Java Long.parseLong(String)
:
แยกวิเคราะห์อาร์กิวเมนต์สตริงเป็นทศนิยมที่ลงนามแล้ว ... ค่ายาวที่ได้จะถูกส่งกลับเช่นเดียวกับอาร์กิวเมนต์และ radix 10 ที่ได้รับเป็นอาร์กิวเมนต์ของ
parseLong(java.lang.String, int)
วิธีการ
สตริงที่ไม่ใช่ทศนิยม:
Kotlin's String.toLong(radix: Int)
เทียบเท่ากับeLong.parseLong(String, int)
ของ Java :
แยกวิเคราะห์อาร์กิวเมนต์สตริงตามความยาวที่ลงชื่อใน radix ที่ระบุโดยอาร์กิวเมนต์ที่สอง อักขระในสตริงทั้งหมดต้องเป็นตัวเลขของฐานที่ระบุ ...
และนี่java.lang.Long.decode(String)
คือภาพ:
ถอดรหัสสตริงเป็น Long ยอมรับเลขฐานสิบเลขฐานสิบหกและเลขฐานแปดที่กำหนดโดยไวยากรณ์ต่อไปนี้: DecodableString:
(เครื่องหมาย) เลขทศนิยม (ลงชื่อ) 0x HexDigits | (ลงชื่อ) 0X HexDigits | (ลงชื่อ) # HexDigits | (ลงชื่อ) 0 OctalDigits
เครื่องหมาย: - | +
นั่นหมายความว่า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
การแปลงString
ไปLong
(ที่แสดงถึง 64 บิตลงนามจำนวนเต็ม) ใน Kotlin 1.3 ค่อนข้างง่าย
คุณสามารถใช้หนึ่งในสามวิธีต่อไปนี้:
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 |
+—————————————————————————————————————————————+——————————+———————————————————————+