我在Kotlin/Native中使用Okio,我想检查一个路径是否在另一个路径内。
虽然有一个等于/大于/小于运算符,但看起来它只比较长度。
示例:
"/a/b/c/d".toPath().startsWith("/a/b/c".toPath()) // should return true
"/a/b/d/d".toPath().startsWith("/a/b/c".toPath()) // should return false
但是startsWith不存在。
Kotlin/JVM通过Java支持:https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.io/java.io.-file/starts-with.html
2条答案
按热度按时间qni6mghb1#
您可以
.toString()
Path
s来执行此操作。你也可以使用
relativeTo
并检查结果。这不是完全正确的,但下面的内容可能是一个开始:wswtfjt72#
我创建了这个扩展函数,它实现了
startsWith
,如问题中所述:它首先检查
other
路径是否比this
路径有更多的段(或组件),这意味着它们不匹配,因为/a/b/c
永远不会以/a/b/c/d
(甚至/1/2/3/4
)开始。如果
other
的段计数相同或更少,则继续将this
切片为与other
一样多的段,以便忽略任何子条目。然后,通过使用相同的索引访问
other
的片段,过滤this
的不匹配的切片片段。现在我们有了一个在同一索引上不匹配的段列表。通过检查列表
isEmpty()
,我们现在有了this
是否以other
开始的结论(如果你愿意,你可以把它变成中缀)。通过测试: