2013-10-22 4 views
66

Kotlin Challenge hat begonnen.Wie konvertiert man String in Long in Kotlin?

Alle Aufgaben bestehen darin, ein Konsolenprogramm zu schreiben, das Parameter von der Konsole liest und Ausgaben an die Konsole schreibt, um die automatische Prüfung zu ermöglichen.

die wichtigste Methode in Kotlin sieht aus wie

fun main(args: Array<String>): Unit { 
    //do something 
} 

Die meisten der Eingangsparameter in Aufgaben sollten als Zahlen interpretiert werden. Also, wegen fehlender Methoden wie Long.valueOf(String s) steckte ich einfach. Ich kann String nicht in Long umwandeln und ich schäme mich.

Antwort

40

1.string.toLong()

Analysiert den String als [Long] Zahl und gibt das Ergebnis.

@throws NumberFormatException, wenn die Zeichenfolge keine gültige Darstellung einer Zahl ist.

2. string.toLongOrNull()

Analysiert den String als [Long] Zahl und gibt das Ergebnis oder null , wenn die Zeichenfolge keine gültige Darstellung einer Zahl ist.

3. str.toLong(10)

Analysiert den String als [Long] Zahl und gibt das Ergebnis.

@throws NumberFormatException, wenn die Zeichenfolge keine gültige Darstellung einer Zahl ist.

@throws IllegalArgumentException wenn [Radix] ist keine gültige Basis für die Konvertierung von String zu Zahl.

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

4. string.toLongOrNull(10)

Analysiert den String als [Long] Zahl und gibt das Ergebnis oder null , wenn die Zeichenfolge keine gültige Darstellung einer Zahl ist.

@throws IllegalArgumentException, wenn [radix] keine gültige Basis für die Zeichenfolge für die Zahlenumwandlung ist.

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

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

public static Long valueOf(String s) throws NumberFormatException 
+1

eyval, ale bod –

6

Es ist interessant. Code wie folgt aus:

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

macht diese Ausgabe:

2 
true 

ich denke, macht Kotlin Umwandlung von java.lang.Long und lange primitiv kotlin.Long in diesem Fall automatisch. Also, es ist eine Lösung, aber ich würde mich freuen, ein Tool ohne java.lang-Paket zu sehen.

84

String hat eine entsprechende Erweiterungsmethode:

"10".toLong() 
+1

Namen in Kotlin geändert haben, müssen Sie nicht darüber, wo oder warum sich Sorgen zu machen, gerade in Kotlin wissen, dass alle 'String' haben eine Erweiterungsfunktion 'toLong()' sowie 'toInt()' und andere. Sie können diese verwenden. Vielleicht kann @ilya diese Antwort auf den aktuellen Kotlin aktualisieren (entfernen Sie den 'jet.String'-Verweis.) –

+0

Nur ein Kopf hoch, wenn Sie eine Folge von Ziffern durchlaufen, werden sie Zeichen und [char] .toInt() wird geben Sie die ASCII-Darstellung. – Peheje

48

Erweiterungsmethoden sind für String s in andere primitive Typen zu analysieren. Beispiele unten:

+2

'str.toLongOrNull()' und andere ähnlich benannte Methoden sind auch nützlich, wenn Sie nicht garantieren können, dass die Eingabe korrekt formatiert wird. Mit diesem können Sie Dinge wie 'str.toLongOrNull() 'tun. Lassen Sie {doSomethingWith (it)}?: Println (" Bitte geben Sie eine Nummer ein ")' – sotrh

8

Hinweis: Die Antworten auf jet.String sind veraltet. Hier ist aktuelle Kotlin (1.0):

Alle String in Kotlin hat bereits eine Erweiterung Funktion können Sie toLong() anrufen. Nichts Besonderes wird benötigt, benutze es einfach.

Alle extension functions for String sind dokumentiert. Sie können andere für Standard-lib in der Tat api reference

6

finden, 90% der Zeit, müssen Sie auch die ‚lange‘ gültig ist zu überprüfen, so dass Sie benötigen:

"10".toLongOrNull() 

Es gibt eine ‚orNull‘ Äquivalent für jede 'toLong' der Grundtypen, und diese ermöglichen die Verwaltung von ungültigen Fällen im Einklang mit dem Kotlin? Idiom.

+0

Einverstanden. Die meiste Zeit .toLongOrNull() ist, was Sie brauchen. – Andrej

Verwandte Themen