Kotlin中String转Long:5个致命错误及如何避免

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

如何在Kotlin中将String转换为Long而不抓狂:典型错误解析

\n\n

每个Kotlin开发者迟早都会遇到这样的任务:需要获取用户输入的字符串、来自API的响应或读取的文件内容,并将其转换为Long类型的数字。看起来很简单,对吧?但正是在这里,新手(甚至是有经验的程序员)会犯下错误,导致应用崩溃、屏幕空白以及通宵调试。

\n\n

在本文中,我们将解析在Kotlin中将String转换为Long时最常见的五个错误。您不仅会学到如何修复它们,还会学到如何编写在第一次遇到无效输入时不会崩溃的代码。开始吧!

\n\n

错误#1:天真地使用toLong()而不处理异常

\n\n

最直接的方法是对字符串调用toLong()方法。是的,这确实有效,但前提是字符串包含有效的数字。否则——你好,NumberFormatException!

\n\n
val userInput = "123abc"\nval number: Long = userInput.toLong() // 会抛出NumberFormatException!
\n\n

为什么这不好?运行时异常始终是一种风险。如果您的应用没有处理它,用户将看到崩溃。

\n\n

如何修复?使用try-catch,或者更好的方法是使用安全的替代方案——toLongOrNull()。

\n\n
val userInput = "123abc"\nval number: Long? = userInput.toLongOrNull() // 返回null,没有异常\nprintln(number) // null
\n\n

toLongOrNull()方法是您的救星。如果字符串无法转换,它只会返回null,您可以轻松处理这种情况。

\n\n

错误#2:忽略null和空字符串

\n\n

在Kotlin中,类型明确分为可空(nullable)和非空(non-null)。如果您尝试对可能为null的字符串调用toLong(),编译器不会允许。但有一个陷阱:空字符串("")不是null,它也会引发异常。

\n\n
val nullableString: String? = null\n// nullableString.toLong() // 编译错误:仅允许安全(?.)或非空断言(!!.)调用\n\nval emptyString = ""\nemptyString.toLongOrNull() // null,一切正常
\n\n

实用建议:始终检查字符串是否为空,或者将toLongOrNull()与Elvis运算符?:结合使用。

\n\n
fun parseUserAge(input: String?): Long {\n    return input?.toLongOrNull() ?: 0L // 如果为null或不是数字——返回0\n}
\n\n

这种方法使代码既地道又安全。

\n\n

错误#3:忘记处理空格和不可见字符

\n\n

用户是不可预测的生物。他们可能会在数字前或数字后不小心输入空格。来自文件的字符串可能包含换行符\\n。toLongOrNull()方法不会修剪字符串——它期望字符串仅由数字(可能还有负号)组成。

\n\n
val dirtyString = "  42  "\ndirtyString.toLongOrNull() // null,因为存在空格
\n\n

解决方案:在转换之前始终调用trim()。

\n\n
val cleanString = dirtyString.trim()\nval number: Long? = cleanString.toLongOrNull()\nprintln(number) // 42
\n\n

这是避免错误最简单有效的方法之一。记住这条规则:转换前先修剪。

\n\n

错误#4:本地化和分隔符问题

\n\n

不同国家/地区的数字书写方式不同。在美国和俄罗斯,千位分隔符使用逗号(1,234)或空格(1 234),而小数部分用点分隔。在欧洲则相反:逗号是小数分隔符。Kotlin默认期望“干净”

博客

书籍推荐