我想列出Windows OS文件夹的文件。 我想在Kotlin中使用Windows文件地址而不使用双反斜杠。 我不希望科特林在这里解释反斜杠。
当我在问题末尾找到的那一刻是我最好的结果。
错误:(3,24)Kotlin:非法转义:'\ M'返回以下内容:
fun main(args: Array<String>) {
var s: String = "G:\My Web Sites\"
println(s)
}
我不想每次都用反斜杠来屏蔽反斜杠。我认为它看起来不好,不能轻易地来回复制。
有效但不美观:
fun main(args: Array<String>) {
var s: String = "G:\\My Web Sites\\"
println(s)
}
解决方法:
也许我会一直做下去,直到找到其他解决方案为止。
是否有机会切换File.separator?
当然,这给了我同样的错误,因为替换为时已晚:
import java.io.File
fun main(args: Array<String>) {
var s: String = "G:\My Web Sites\"
val replace = s.replace('/', File.separatorChar);
println(replace)
}
最佳结果:
我得到的最佳结果如下。它返回正确的文件字符串,但现在返回文件夹中的文件。 它返回正确的字符串: “ G:\\我的网站\\”
import java.io.File
fun main(args: Array<String>) {
var s = """"G:\My Web Sites\"""
println(s)
s= s.replace("\\", "\\\\")
println(s)
File(s).walk().forEach { println(it) }
}
private fun String.replace(regex: Regex, notMatched: (String) -> String, matched: (MatchResult) -> String): String {
// its from https://github.com/http4k/http4k/blob/master/http4k-core/src/main/kotlin/org/http4k/core/UriTemplate.kt
val matches = regex.findAll(this)
val builder = StringBuilder()
var position = 0
for (matchResult in matches) {
val before = substring(position, matchResult.range.start)
if (before.isNotEmpty()) builder.append(notMatched(before))
builder.append(matched(matchResult))
position = matchResult.range.endInclusive + 1
}
val after = substring(position, length)
if (after.isNotEmpty()) builder.append(notMatched(after))
return builder.toString()
}
答案 0 :(得分:1)
您应在代码中使用斜杠,JVM将在Windows上将其自动转换为反斜杠(请参见Forward slash or backslash?)。
如果您真的想使用反斜杠,则可以使用原始字符串"""
进行操作,而后无需手动替换。