我目前正在研究一个 Scala 项目,并将其转换为 Java。一切都很好,但我偶然发现了这个片段:
Pattern fileNamePattern = Pattern.compile("^(\\w+).*(_\\w+\\.xml)$");
new File(filePath).getName match {
case FileNamePattern(first, last) => return first + last
case n => return n
}
我理解正则表达式,一个或多个字母、数字或标点符号,后跟 0 个或多个字符,然后是一个或多个字母、数字或标点符号。此函数的目的是从文件路径中获取文件名,但这在 Java 中确实非常简单,所以我认为 Scala 开发人员不会让它变得如此不必要的复杂。
问题是,我不想继续前进并假设开发人员是个白痴,也许他们正在尝试做一些更聪明的事情,而我对 Scala 的缺乏经验阻止了我看到它。所以有人可以解释一下:
- 带有匹配的语法
- 第一个和最后一个到底是从哪里来的
- 导致此代码段的 Java 等价物的等价物 / 文档
def getFileName(filePath: String): String = {
if(filePath == null || filePath.trim.length == 0) {
return filePath
}
val FileNamePattern = new Regex("^(\\w+).*(_\\w+\\.xml)$")
new File(filePath).getName match {
case FileNamePattern(first, last) => return first + last
case n => return n
}
}