我正在创建文件,并且想要创建一个新的文件名(如果它已经存在),就像OS X / windows对附加的(1)一样。
我现在正在学习Scala,即使我确定那里已经有了一种方法;如果没有它,我非常想知道如何做到这一点。
我的目标是通过private def doesFileExist(completeFilename: String) : Boolean = {
logger.info("Checking if file already exists")
Files.exists(Paths.get(completeFilename))
}
然后如果是的话我想附加文件名。因为我需要检查文件名是否已经更新,我认为它是最简单的正则表达式,看看是否有"/^[a-zA-Z0-9_-][\\d{1,2}][a-z0-9_\\.]{3,4}$/"
之类的内容
我认为哪个适合,我可能错了,我还没有能够测试它。 :)
无论我阅读了多少篇文章,我都无法编译它,因此我不确定如何修复它:
val RegexPattern = "/^[a-zA-Z0-9_-][\\d{1,2}][a-z0-9_\\.]{3,4}$/".r
if (fileName.matches(RegexPattern)) {
}
这显然失败了,因为它期待一个字符串但我给它正则表达式。然后我尝试了一场比赛......
fileName match {
case RegexPattern => println("Etf")
}
但这也是不正确的。感谢任何帮助,谢谢。
编辑:在线查找示例后略有不同的方法。
val pattern = "([0-9]+) ([A-Za-z]+)".r
val pattern(count, fruit) = "100 Bananas"
println(pattern)
println(count)
println(fruit)
val RegexPattern = "(.+(?=\\/))(\\/)(.+(?=\\.))".r
val RegexPattern(dir, delimeter, file) = "direct/ory/filename.ext"
println(dir + " - " )
注意,bona示例工作正常,但是我没有。正则表达式在测试时有效。
答案 0 :(得分:0)
以防这可以帮助别人:
我没有意识到正则表达式需要匹配我正在比较的确切字符串。
我val RegexPattern = "(.+(?=\\/))(\\/)(.+(?=\\.))".r
的旧模式忽略了最后的扩展。我认为,看到我并不关心它,我不需要将它包含在模式中。愚蠢地期望它与第一个匹配并省略其余部分。
使用以下简单的示例玩时,这一点变得清晰:
val x = "(\\w)(\\w)".r
val x(c, s) = "an"
println(c, s)
如果你删除了'它抱怨,相似如果你没有更新正则表达式屁股,它抱怨。事后才有了完美的感觉......
我的测试工作模式是:
val RegexPattern = "(.+(?=\\/))(\\/)(.+(?=\\.))(.*)".r
val RegexPattern(dir, delimeter, file, ext) = "direct/ory/filename.ext"
println(dir + " - "+ delimeter + " - " + file + " - " + ext)
希望这有助于其他人。