如何将字符串格式化为 phone 数字 kotlin 算法
How to format string to phone number kotlin alghorithm
我得到一个包含 phone 数字的字符串作为输入。该字符串如下所示:
79998886666
但我需要将其转换成这种形式:
+7 999 888-66-66
我尝试了几种方法,但我得到的最新方法是这样的:
private fun formatPhone(phone: String): String {
val prefix = "+"
val countryCode = phone.first()
val regionCode = phone.dropLast(7).drop(1)
val firstSub = phone.dropLast(4).drop(4)
val secondSub = phone.dropLast(2).drop(7)
val thirdSub = phone.drop(9)
return "$prefix$countryCode $regionCode $firstSub-$secondSub-$thirdSub"
}
但在我看来,这种方法看起来很奇怪,而且效率不高。
如何以不同的方式解决这个问题?
您可以在此处使用正则表达式替换:
val regex = """(\d)(\d{3})(\d{3})(\d{2})(\d{2})""".toRegex()
val number = "79998886666"
val output = regex.replace(number, "+ --")
println(output) // +7 999 888-66-66
您可以创建一个辅助函数,一次 returns 个字符串块:
private fun formatPhone(phone: String): String {
fun CharIterator.next(count: Int) = buildString { repeat(count) { append(next()) } }
return with(phone.iterator()) {
"+${next(1)} ${next(3)} ${next(3)}-${next(2)}-${next(2)}"
}
}
使用 substring
代替 drop
/dropLast
.
可以简化您的原始代码并提高性能
我得到一个包含 phone 数字的字符串作为输入。该字符串如下所示:
79998886666
但我需要将其转换成这种形式:
+7 999 888-66-66
我尝试了几种方法,但我得到的最新方法是这样的:
private fun formatPhone(phone: String): String {
val prefix = "+"
val countryCode = phone.first()
val regionCode = phone.dropLast(7).drop(1)
val firstSub = phone.dropLast(4).drop(4)
val secondSub = phone.dropLast(2).drop(7)
val thirdSub = phone.drop(9)
return "$prefix$countryCode $regionCode $firstSub-$secondSub-$thirdSub"
}
但在我看来,这种方法看起来很奇怪,而且效率不高。 如何以不同的方式解决这个问题?
您可以在此处使用正则表达式替换:
val regex = """(\d)(\d{3})(\d{3})(\d{2})(\d{2})""".toRegex()
val number = "79998886666"
val output = regex.replace(number, "+ --")
println(output) // +7 999 888-66-66
您可以创建一个辅助函数,一次 returns 个字符串块:
private fun formatPhone(phone: String): String {
fun CharIterator.next(count: Int) = buildString { repeat(count) { append(next()) } }
return with(phone.iterator()) {
"+${next(1)} ${next(3)} ${next(3)}-${next(2)}-${next(2)}"
}
}
使用 substring
代替 drop
/dropLast
.