在 kotlin 中,将数字转换为字符串非常简单且灵活。以下是几种常用的方法及其示例:
1. 直接使用 tostring() 方法
所有数字类型(int
、long
、double
等)都提供了 tostring()
方法,可以直接将数字转为字符串。
val number = 42 val str1 = number.tostring() // "42" val pi = 3.14159 val str2 = pi.tostring() // "3.14159"
2. 字符串模板(自动转换)
在字符串模板中,数字会自动调用 tostring()
,无需显式转换。
使用 ${}
或 $
符号嵌入变量:
val age = 25 val message1 = "年龄是 $age" // 直接嵌入变量,自动转为字符串 val message2 = "圆周率: ${3.1415}" // 表达式也可自动转换
输出结果:
年龄是 25
圆周率: 3.1415
3. 格式化字符串(控制输出格式)
若需要特定格式(如保留小数位数),可以使用 format()
方法或 java 风格的格式化工具。
示例 1:保留两位小数
val price = 9.99 val formatted = "%.2f".format(price) // "9.99"
示例 2:填充前导零
val code = 7 val formattedcode = "%03d".format(code) // "007"(3位数字,不足补零)
示例 3:结合字符串模板
val temperature = 28.5 val report = "当前温度: ${"%.1f".format(temperature)}°c" // "当前温度: 28.5°c"
4. 处理可空类型(int?、double? 等)
若数字变量可能为 null
,需先安全处理空值,再转换:
val nullablenumber: int? = null val str = nullablenumber?.tostring() ?: "未知" // 如果为 null,返回 "未知"
对比 java 的隐式转换
与 java 不同,kotlin 禁止隐式类型转换,直接拼接数字和字符串会报错:
// 错误示例(无法编译): val errormsg = "结果: " + 100 // 需改为 "结果: ${100}" 或 100.tostring()
小结
• 简单场景:直接使用 tostring()
或字符串模板。
• 复杂格式:用 "%.2f".format(...)
控制精度或格式。
• 空值安全:结合 ?.
和 elvis 操作符 ?:
处理可空类型。
通过这些方法,你可以灵活地将数字转换为字符串,并根据需求调整输出格式。
在 kotlin 中,可以将字符串转换为数字,但需确保字符串格式合法,否则可能抛出异常或返回 null
。以下是具体方法和注意事项:
1. 直接转换方法
kotlin 为字符串提供了扩展函数,可将字符串转换为目标数字类型:
方法 | 说明 |
---|---|
toint() | 将字符串转为 int ,若格式非法(如包含字母),抛出 numberformatexception |
todouble() | 将字符串转为 double ,同上 |
tolong() | 将字符串转为 long ,同上 |
tofloat() | 将字符串转为 float ,同上 |
示例
val str1 = "123" val num1 = str1.toint() // 123(成功) val str2 = "3.14" val num2 = str2.todouble() // 3.14(成功) val str3 = "abc" val num3 = str3.toint() // 抛出 numberformatexception(失败)
2. 安全转换(避免异常)
使用 toxxxornull()
方法,转换失败时返回 null
而非抛出异常:
方法 | 说明 |
---|---|
tointornull() | 转换失败返回 null |
todoubleornull() | 同上 |
tolongornull() | 同上 |
tofloatornull() | 同上 |
示例
val str = "123a" val num = str.tointornull() // null(失败) // 结合 elvis 操作符提供默认值 val safenum = str.tointornull() ?: 0 // 0
3. 处理特殊格式的字符串
若字符串包含非数字字符(如货币符号、千位分隔符),需先清理再转换:
示例:移除非数字字符
val pricestr = "$1,234.5" val cleanedstr = pricestr.replace("[^\\d.]".toregex(), "") // "1234.5" val price = cleanedstr.todoubleornull() // 1234.5
4. 不同进制的字符串转换
kotlin 支持将二进制、十六进制等格式的字符串转换为数字:
示例:十六进制转十进制
val hexstr = "1a" val decimal = hexstr.toint(16) // 26(16 进制)
示例:二进制转十进制
val binarystr = "1010" val decimal = binarystr.toint(2) // 10(2 进制)
5. 使用 numberformat(处理本地化格式)
若字符串包含本地化的数字格式(如逗号分隔符),可使用 numberformat
解析:
示例
import java.text.numberformat val str = "1,234.5" val format = numberformat.getinstance() // 根据系统本地化设置解析 val number = format.parse(str)?.todouble() // 1234.5
6. 自定义转换逻辑
若需更复杂的转换逻辑(如混合单位),可手动处理字符串:
示例:解析带单位的字符串
fun parsepercentage(str: string): double? { return str.removesuffix("%").trim().todoubleornull()?.div(100) } val percentage = parsepercentage("75%") // 0.75
总结
• 直接转换:toint()
、todouble()
等,但需处理异常。
• 安全转换:优先使用 toxxxornull()
,结合 ?:
提供默认值。
• 清理格式:移除非法字符后再转换。
• 进制转换:通过 toint(radix)
支持二进制、十六进制等。
• 本地化处理:使用 numberformat
解析复杂格式。
通过合理选择方法,可以高效且安全地将字符串转换为数字。
到此这篇关于kotlin中的数据转换的文章就介绍到这了,更多相关kotlin中的数据转换内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论