Câu trả lời:
1. string.toLong()
Phân tích chuỗi dưới dạng số [Dài] và trả về kết quả.
@throw NumberFormatException nếu chuỗi không phải là đại diện hợp lệ của một số.
2. string.toLongOrNull()
Phân tích chuỗi dưới dạng số [Dài] và trả về kết quả hoặc
null
nếu chuỗi không phải là đại diện hợp lệ của số.
3. str.toLong(10)
Phân tích chuỗi dưới dạng số [Dài] và trả về kết quả.
@throw NumberFormatException nếu chuỗi không phải là đại diện hợp lệ của một số.
@throws IllegalArgumentException khi [radix] không phải là cơ số hợp lệ để chuyển đổi chuỗi thành số.
public inline fun String.toLong(radix: Int): Long = java.lang.Long.parseLong(this, checkRadix(radix))
4. string.toLongOrNull(10)
Phân tích chuỗi dưới dạng số [Dài] và trả về kết quả hoặc
null
nếu chuỗi không phải là đại diện hợp lệ của số.@throws IllegalArgumentException khi [radix] không phải là cơ số hợp lệ để chuyển đổi chuỗi thành số.
public fun String.toLongOrNull(radix: Int): Long? {...}
5. java.lang.Long.valueOf(string)
public static Long valueOf(String s) throws NumberFormatException
String
có một phương thức mở rộng tương ứng:
"10".toLong()
String
có chức năng mở rộng toLong()
cũng như các chức năng toInt()
khác. Bạn có thể sử dụng chúng. Có lẽ @ilya có thể cập nhật câu trả lời này cho Kotlin hiện tại (xóa jet.String
tham chiếu.)
Các phương thức mở rộng có sẵn cho String
s để phân tích chúng thành các kiểu nguyên thủy khác. Ví dụ dưới đây:
str.toLongOrNull()
và các phương thức được đặt tên tương tự khác cũng hữu ích nếu bạn không thể đảm bảo rằng đầu vào sẽ được định dạng chính xác. Với điều này, bạn có thể làm những việc nhưstr.toLongOrNull()?.let { doSomethingWith(it) } ?: println("Please input a number")
Lưu ý: Câu trả lời đề cập jet.String
đã lỗi thời. Đây là Kotlin hiện tại (1.0):
Bất kỳ String
trong Kotlin đều có chức năng mở rộng mà bạn có thể gọi toLong()
. Không có gì đặc biệt là cần thiết, chỉ cần sử dụng nó.
Tất cả các chức năng mở rộng choString
được ghi lại. Bạn có thể tìm thấy những người khác cho lib tiêu chuẩn trong tài liệu tham khảo api
Thật thú vị. Mã như thế này:
val num = java.lang.Long.valueOf("2");
println(num);
println(num is kotlin.Long);
làm cho đầu ra này:
2
true
Tôi đoán, Kotlin thực hiện chuyển đổi từ java.lang.Long
và nguyên thủy từ lâu sang kotlin.Long
tự động trong trường hợp này. Vì vậy, đó là giải pháp, nhưng tôi sẽ rất vui khi thấy công cụ mà không sử dụng gói java.lang.
Trên thực tế, 90% thời gian bạn cũng cần kiểm tra 'dài' là hợp lệ, vì vậy bạn cần:
"10".toLongOrNull()
Có một loại 'tương đương' cho mỗi loại 'toLong' của các loại cơ bản và những loại này có cho phép quản lý các trường hợp không hợp lệ khi giữ với Kotlin không? cách diễn đạt.
chuỗi.toLong ()
string
biến của bạn ở đâu
Một khả năng Java cũ tốt những gì không được đề cập trong các câu trả lời là java.lang.Long.decode(String)
.
Chuỗi thập phân:
Của Kotlin String.toLong()
tương đương với Java Long.parseLong(String)
:
Phân tích đối số chuỗi dưới dạng thập phân dài đã ký . ... Giá trị dài kết quả được trả về, chính xác như thể đối số và cơ số 10 được đưa ra làm đối số cho
parseLong(java.lang.String, int)
phương thức.
Chuỗi không thập phân:
Kotlin's String.toLong(radix: Int)
tương đương với Java của eLong.parseLong(String, int)
:
Phân tích đối số chuỗi dưới dạng dài ký trong cơ số được chỉ định bởi đối số thứ hai. Tất cả các ký tự trong chuỗi phải là chữ số của cơ số được chỉ định ...
Và đây java.lang.Long.decode(String)
là hình ảnh:
Giải mã một chuỗi thành dài. Chấp nhận số thập phân, thập lục phân và số bát phân được đưa ra bởi ngữ pháp sau: DecodableString:
(Ký hiệu) DecimalNumeral | (Ký) 0x HexDigits | (Ký) 0X HexDigits | (Ký) # HexDigits | (Ký) 0 OctalDigits
Ký tên: - | +
Điều đó có nghĩa là decode
có thể phân tích các chuỗi như "0x412"
, trong đó các phương thức khác sẽ dẫn đến một 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
Để chuyển đổi một String
đến Long
(đại diện cho một ký số nguyên 64-bit) trong Kotlin 1.3 khá đơn giản .
Bạn có thể sử dụng bất kỳ phương pháp nào trong ba phương pháp sau:
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
Trên thực tế, có một số cách:
Được:
var numberString : String = "numberString"
// number is the Long value of numberString (if any)
var defaultValue : Long = defaultValue
Sau đó chúng tôi có:
+—————————————————————————————————————————————+——————————+———————————————————————+
| numberString is a valid number ? | true | false |
+—————————————————————————————————————————————+——————————+———————————————————————+
| numberString.toLong() | number | NumberFormatException |
+—————————————————————————————————————————————+——————————+———————————————————————+
| numberString.toLongOrNull() | number | null |
+—————————————————————————————————————————————+——————————+———————————————————————+
| numberString.toLongOrNull() ?: defaultValue | number | defaultValue |
+—————————————————————————————————————————————+——————————+———————————————————————+