我想列出Windows OS文件夹的文件。我想使用Kotlin中的Windows文件地址而不使用双反斜杠。我不想让Kotlin在这里解释反斜杠。
你在我问题的结尾找到了我最好的结果。
错误:(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:\My站点\“
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()
}发布于 2018-10-16 04:34:14
您应该在代码中使用斜杠,JVM将在Windows上自动将其转换为反斜杠(参见Forward slash or backslash?)。
如果您真的喜欢使用反斜杠,那么原始字符串"""就可以完成这项工作,以后不需要手动替换它。
https://stackoverflow.com/questions/52827496
复制相似问题