如何在Kotlin中实现类似Java Scanner.skip()的字符串开头跳过功能
在Kotlin中实现类似Java Scanner.skip()的字符串前缀跳过功能
嘿,这个需求在Kotlin里其实有好几种简洁又好用的实现方式,我给你梳理几个常用的:
1. 直接用内置的removePrefix方法(最推荐)
Kotlin的字符串类本身就提供了专门移除开头指定前缀的方法,完全符合你的需求,写法超简单:
val originalStr = "**hello stack" val processedStr = originalStr.removePrefix("**") println(processedStr) // 输出:hello stack
这个方法很贴心——如果原字符串开头并不是你指定的前缀,它会直接返回原字符串,不会抛出异常,安全性拉满。
2. 用正则表达式的replaceFirst(适合灵活匹配场景)
如果你需要跳过的前缀是某种模式(比如开头任意数量的星号),而不是固定字符串,正则表达式就派上用场了:
val originalStr = "**hello stack" // 匹配开头的两个星号并替换为空 val processedStr = originalStr.replaceFirst("^\\*\\*", "") println(processedStr) // 输出:hello stack
要是你想跳过开头所有的星号(不管有几个),只需要把正则改成^\\*+就行,是不是很灵活?
3. 自定义扩展函数skip(贴合你的直观写法)
如果你就想让字符串直接调用skip("**")这种方法,完全可以自己写个扩展函数,让用法更贴合你的预期:
// 给String类扩展一个skip方法 fun String.skip(prefix: String): String { return if (this.startsWith(prefix)) { this.substring(prefix.length) } else { this // 前缀不匹配时返回原字符串 } } // 调用方式和你想要的一模一样 val originalStr = "**hello stack" val processedStr = originalStr.skip("**") println(processedStr) // 输出:hello stack
这个扩展函数的逻辑和removePrefix其实差不多,但名字更符合你想要的skip语义,用起来更顺手。
内容的提问来源于stack exchange,提问作者Joe Qstc
相关产品推荐
相关产品推荐

