Я хочу перечислить файлы в папке ОС Windows.Я хочу использовать адреса файлов Windows в Kotlin без двойной обратной косой черты.Я не хочу, чтобы 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: \\ Мои веб-сайты \\"
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()
}