Kotlin에서 String을 Long으로 변환하는 방법?


157

그래서, Long.valueOf(String s)나는 붙어있는 것과 같은 방법이 없기 때문에 .

Kotlin에서 String을 Long으로 변환하는 방법?

답변:


153

1. string.toLong()

문자열을 [Long] 숫자로 구문 분석하고 결과를 리턴합니다.

@throws NumberFormatException 문자열이 유효한 숫자 표현이 아닌 경우.

2. string.toLongOrNull()

문자열을 [Long] 숫자로 구문 분석하고 결과 null 가 문자열이 유효한 숫자 표현이 아닌 경우를 리턴합니다 .

삼. str.toLong(10)

문자열을 [Long] 숫자로 구문 분석하고 결과를 리턴합니다.

@throws NumberFormatException 문자열이 유효한 숫자 표현이 아닌 경우.

@throws IllegalArgumentException [radix]가 문자열 대 숫자 변환에 유효한 기수가 아닌 경우.

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

4. string.toLongOrNull(10)

문자열을 [Long] 숫자로 구문 분석하고 결과 null 가 문자열이 유효한 숫자 표현이 아닌 경우를 리턴합니다 .

@throws IllegalArgumentException [radix]가 문자열 대 숫자 변환에 유효한 기수가 아닌 경우.

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

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

public static Long valueOf(String s) throws NumberFormatException

1
eyval, alee bood
DolDurma

94

String 해당 확장 방법이 있습니다.

"10".toLong()

1
Kotlin에서 이름이 변경되었으므로 어디서 또는 왜 걱정할 필요가 없습니다. Kotlin에서 모두 String확장 기능 및 기타 기능 toLong()을 가지고 있음을 알기 만하면 toInt()됩니다. 이것들을 사용할 수 있습니다. 어쩌면 @ilya는이 답변을 현재 Kotlin으로 업데이트 할 수 있습니다 ( jet.String참조 제거 )
Jayson Minard

문자열을 반복하면 숫자 문자열을 반복하면 문자가되고 [char] .toInt ()는 ASCII 표현을 제공합니다.
Peheje

58

확장 메소드는 String다른 기본 유형으로 구문 분석 할 수 있습니다. 아래 예 :


2
str.toLongOrNull()입력의 형식이 올바르다는 것을 보장 할 수없는 경우 비슷한 이름의 다른 메소드도 유용합니다. 이것으로 당신은 같은 일을 할 수 있습니다str.toLongOrNull()?.let { doSomethingWith(it) } ?: println("Please input a number")
sotrh

9

참고 : 언급 한 답변 jet.String은 구식입니다. 현재 Kotlin (1.0)은 다음과 같습니다.

StringKotlin의 모든 사용자 는 이미 호출 할 수있는 확장 기능을 가지고 있습니다 toLong(). 특별한 것이 필요하지 않습니다. 그냥 사용하십시오.

에 대한 모든 확장 기능String 이 문서화되어 있습니다. API 참조 에서 표준 lib에 대한 다른 것을 찾을 수 있습니다.


7

흥미 롭군. 다음과 같은 코드 :

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

이 출력을 만듭니다.

2
true

Kotlin 은이 경우 java.lang.Long긴 프리미티브에서 kotlin.Long자동으로 변환 합니다. 따라서 솔루션이지만 java.lang 패키지 사용없이 도구를 보게되어 기쁩니다.


6

실제로 '길이'도 확인해야하는 시간의 90 %가 유효하므로 다음이 필요합니다.

"10".toLongOrNull()

기본 유형의 각 'toLong'마다 'orNull'이 있으며 Kotlin과 함께 유효하지 않은 사례를 관리 할 수 ​​있습니까? 관용구.


동의했다. 대부분의 경우 .toLongOrNull ()이 필요합니다.
Andrej


0

답변에 언급되지 않은 좋은 오래된 Java 가능성은 java.lang.Long.decode(String)입니다.


십진 문자열 :

Kotlin String.toLong()은 Java와 동일합니다 Long.parseLong(String).

문자열 인수를 부호있는 10 진수 long 으로 구문 분석합니다 . ... 인수와 기수 10이 parseLong(java.lang.String, int)메소드의 인수로 제공된 것처럼 정확하게 long 값이 리턴 됩니다.


비소수 문자열 :

Kotlin String.toLong(radix: Int)은 Java의 e와Long.parseLong(String, int) 같습니다.

문자열 인수를 두 번째 인수로 지정된 기수의 부호있는 long으로 구문 분석합니다. 문자열의 모든 문자는 지정된 기수의 자리수 여야합니다 ...

그리고 여기 java.lang.Long.decode(String)그림 이 나온다 .

문자열을 Long으로 디코딩합니다. 다음 문법으로 주어진 10 진수, 16 진수 및 8 진수를 허용합니다. DecodableString :

(기호) DecimalNumeral | (기호) 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

0

Kotlin 1.3에서 Stringto Long(64 비트 부호있는 정수를 나타냄) 를 변환하는 것은 매우 간단 합니다.

다음 세 가지 방법 중 하나를 사용할 수 있습니다.

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 당신의 예제에서 numberString은 어디에서 사용됩니까 / defaultValue = Long : numberString이어야한다고 생각합니까?
제임스 스미스
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.