How to convert String to Long in Kotlin?

Kotlin

Kotlin Problem Overview


So, due to lack of methods like Long.valueOf(String s) I am stuck.

How to convert String to Long in Kotlin?

Kotlin Solutions


Solution 1 - Kotlin

1. string.toLong()

> Parses the string as a [Long] number and returns the result.

> @throws NumberFormatException if the string is not a valid > representation of a number.

2. string.toLongOrNull()

> Parses the string as a [Long] number and returns the result or null > if the string is not a valid representation of a number.

3. str.toLong(10)

> Parses the string as a [Long] number and returns the result.

> @throws NumberFormatException if the string is not a valid > representation of a number.

> @throws IllegalArgumentException when > [radix] is not a valid radix for string to number conversion.

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

4. string.toLongOrNull(10)

> Parses the string as a [Long] number and returns the result or null > if the string is not a valid representation of a number.

> @throws IllegalArgumentException when [radix] is not a valid radix for string > to number conversion.

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

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

public static Long valueOf(String s) throws NumberFormatException

Solution 2 - Kotlin

String has a corresponding extension method:

"10".toLong()

Solution 3 - Kotlin

Extension methods are available for Strings to parse them into other primitive types. Examples below:

Solution 4 - Kotlin

Note: Answers mentioning jet.String are outdated. Here is current Kotlin (1.0):

Any String in Kotlin already has an extension function you can call toLong(). Nothing special is needed, just use it.

All extension functions for String are documented. You can find others for standard lib in the api reference

Solution 5 - Kotlin

Actually, 90% of the time you also need to check the 'long' is valid, so you need:

"10".toLongOrNull()

There is an 'orNull' equivalent for each 'toLong' of the basic types, and these allow for managing invalid cases with keeping with the Kotlin? idiom.

Solution 6 - Kotlin

It's interesting. Code like this:

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

makes this output:

2
true

I guess, Kotlin makes conversion from java.lang.Long and long primitive to kotlin.Long automatically in this case. So, it's solution, but I would be happy to see tool without java.lang package usage.

Solution 7 - Kotlin

To convert a String to Long (that represents a 64-bit signed integer) in Kotlin is quite simple.

You can use any of the following three methods:

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

Solution 8 - Kotlin

One good old Java possibility what's not mentioned in the answers is java.lang.Long.decode(String).


Decimal Strings:

Kotlin's String.toLong() is equivalent to Java's Long.parseLong(String):

> Parses the string argument as a signed decimal long. ... The > resulting long value is returned, exactly as if the argument and the > radix 10 were given as arguments to the parseLong(java.lang.String, int) method.


Non-decimal Strings:

Kotlin's String.toLong(radix: Int) is equivalent to Java's eLong.parseLong(String, int):

> Parses the string argument as a signed long in the radix specified by > the second argument. The characters in the string must all be digits of the specified radix ...

And here comes java.lang.Long.decode(String) into the picture:

> Decodes a String into a Long. Accepts decimal, hexadecimal, and octal > numbers given by the following grammar: DecodableString: > > (Sign) DecimalNumeral | (Sign) 0x HexDigits | (Sign) 0X HexDigits | (Sign) # HexDigits | (Sign) 0 OctalDigits >
> Sign: - | +

That means that decode can parse Strings like "0x412", where other methods will result in a 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

Solution 9 - Kotlin

If you don't want to handle NumberFormatException while parsing

 var someLongValue=string.toLongOrNull() ?: 0

Solution 10 - Kotlin

string.toLong()

where string is your variable.

Solution 11 - Kotlin

Actually, there are several ways:

Given:

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

Then we have:

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionJeromeView Question on Stackoverflow
Solution 1 - KotlinMisaghView Answer on Stackoverflow
Solution 2 - KotlinIlya KlyuchnikovView Answer on Stackoverflow
Solution 3 - KotlinEricView Answer on Stackoverflow
Solution 4 - KotlinJayson MinardView Answer on Stackoverflow
Solution 5 - Kotlininnov8View Answer on Stackoverflow
Solution 6 - KotlinJeromeView Answer on Stackoverflow
Solution 7 - KotlinAndy JazzView Answer on Stackoverflow
Solution 8 - KotlinDVargaView Answer on Stackoverflow
Solution 9 - KotlinnvinayshettyView Answer on Stackoverflow
Solution 10 - KotlinNikhil KatekhayeView Answer on Stackoverflow
Solution 11 - KotlinHoa NguyenView Answer on Stackoverflow