我得到一个包含电话号码的字符串作为输入.此字符串如下所示:

79998886666

但我需要将其转换为以下形式:

+7 999 888-66-66

我try 了几种方法,但最近得到的一种方法如下:

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"
}

但在我看来,这种方法看起来很奇怪,效率不高.

推荐答案

您可以在此处使用regex替换:

val regex = """(\d)(\d{3})(\d{3})(\d{2})(\d{2})""".toRegex()
val number = "79998886666"
val output = regex.replace(number, "+$1 $2 $3-$4-$5")
println(output)  // +7 999 888-66-66

Kotlin相关问答推荐

有什么原因,我得到一个空相关的错误在这个代码

Android前台服务 list —Altbeacon

Kotlin协程挂起继续线程

在Kotlin中将String转换为T

我需要后台工作才能使用卡夫卡的消息吗?

Mockk:对同一函数进行两次存根会忽略第一个行为

为什么这两个 Kotlin 协程函数不一样?

kotlin 父类具有依赖于抽象变量的变量

为什么多线程不会使执行更快

如何在 Kotlin 中声明一个空数组而不期望 null?

如何在 Android Jetpack Compose 中的画布上绘制一侧加厚的描边?

在 Compose 中使用 Text() 时如何获取文本的大小?

如何判断给定字符串是否多次包含另一个子字符串?

如何在 Kotlin 中为变量设置监听器

runOnUiThread 没有调用

Kotlin 的类型具体化使哪些在 Java 或 Scala 中无法实现的成为可能?

如何在Kotlin中将字符串转换为InputStream?

Kotlin flatMap - map

你如何在 Kotlin 中注释 Pair 参数?

如何在 IntelliJ IDEA 中禁用粘贴时将 Java 转换为 Kotlin?