如何在Kotlin/Native中使用Okio判断路径是否包含另一路径?
在Kotlin/Native中用Okio判断路径是否处于另一个路径内部
Okio的Path类没有直接提供判断子路径的startsWith方法,但可以通过扩展函数结合路径段(segments)的比较来实现需求,核心思路是标准化路径后逐段匹配:
实现扩展函数
import okio.Path import okio.Path.Companion.toPath fun Path.startsWith(base: Path): Boolean { val normalizedThis = this.normalize() val normalizedBase = base.normalize() // 绝对路径与相对路径无法互为父子路径 if (normalizedThis.isAbsolute != normalizedBase.isAbsolute) return false val thisSegments = normalizedThis.segments val baseSegments = normalizedBase.segments // 基准路径段数更多,当前路径不可能是其子路径 if (baseSegments.size > thisSegments.size) return false // 逐段匹配基准路径的所有路径段 for (i in baseSegments.indices) { if (thisSegments[i] != baseSegments[i]) return false } return true }
测试示例
fun main() { // 基础用例 println("/a/b/c/d".toPath().startsWith("/a/b/c".toPath())) // true println("/a/b/d/d".toPath().startsWith("/a/b/c".toPath())) // false // 含相对路径的用例(自动标准化) println("/a/b/../c/d".toPath().startsWith("/a/c".toPath())) // true // 绝对/相对路径不匹配的用例 println("a/b/c".toPath().startsWith("/a/b".toPath())) // false }
逻辑说明
- 路径标准化:调用
normalize()处理路径中的.(当前目录)和..(上级目录),确保路径是最简形式。 - 绝对/相对路径校验:绝对路径和相对路径不属于同一层级,直接返回
false。 - 路径段长度校验:如果基准路径的段数比当前路径多,当前路径不可能是其子路径。
- 逐段匹配:遍历基准路径的所有路径段,与当前路径的对应位置段逐一比较,全部匹配则返回
true。
内容的提问来源于stack exchange,提问作者xdevs23
相关产品推荐
相关产品推荐

