Kotlin计算器TextView实时添加空格千位分隔符实现方案
为计算器TextView添加千位空格分隔符的解决方案
核心思路
每次更新TextView的数值时,先对原始数字字符串做格式化处理,为整数部分添加空格作为千位分隔符,再将格式化后的字符串设置给TextView,替换原始无分隔的数值。
Kotlin实现代码
1. 可复用的字符串扩展函数
创建支持整数、小数、负数场景的格式化扩展函数:
fun String.addThousandSeparator(): String { // 过滤非数字输入,直接返回原内容 if (this.isEmpty() || !this.matches(Regex("-?\\d+(\\.\\d+)?"))) { return this } var input = this val isNegative = input.startsWith("-") // 单独处理负号,避免干扰整数部分格式化 if (isNegative) { input = input.substring(1) } // 拆分整数与小数部分 val numberParts = input.split(".") val integerPart = numberParts[0] val decimalPart = if (numberParts.size > 1) ".${numberParts[1]}" else "" // 反转整数部分,每三位拆分后加空格,再反转回原顺序 val formattedInteger = integerPart.reversed() .chunked(3) .joinToString(" ") .reversed() // 拼接最终结果 return if (isNegative) "-$formattedInteger$decimalPart" else "$formattedInteger$decimalPart" }
2. 实际使用示例
不管是用户实时输入的字符串,还是计算得到的数字结果,都能通过该函数格式化后设置给TextView:
// 场景1:处理用户输入的字符串(从EditText获取后转至TextView显示) val userInput = "1234567" textView.text = userInput.addThousandSeparator() // 显示:1 234 567 // 场景2:处理计算结果(数字类型转字符串后格式化) val calculationResult = 987654.321 textView.text = calculationResult.toString().addThousandSeparator() // 显示:987 654.321 // 场景3:处理负数 val negativeNumber = "-100000" textView.text = negativeNumber.addThousandSeparator() // 显示:-100 000
说明
- 自动判断是否需要添加分隔符:整数部分长度超过3位时插入空格,≤3位时保持原格式。
- 兼容小数、负数场景,不会破坏小数部分的显示。
- 对非数字输入做了容错处理,避免格式化出错。
内容的提问来源于stack exchange,提问作者Khumo Mashapa
相关产品推荐
相关产品推荐

