You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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
}

逻辑说明

  1. 路径标准化:调用normalize()处理路径中的.(当前目录)和..(上级目录),确保路径是最简形式。
  2. 绝对/相对路径校验:绝对路径和相对路径不属于同一层级,直接返回false。
  3. 路径段长度校验:如果基准路径的段数比当前路径多,当前路径不可能是其子路径。
  4. 逐段匹配:遍历基准路径的所有路径段,与当前路径的对应位置段逐一比较,全部匹配则返回true。

内容的提问来源于stack exchange,提问作者xdevs23

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 19:52:23