我试图理解这段代码:
for (File f : files) {
fileName = f.getName().toUpperCase().replaceAll("_\\d\\d\\d\\d_\\d\\d_\\d\\d_\\d\\d_\\d\\d", "");
if (fileName.equals(tableName + ".XML")) {
returnFile = f;
break;
}
}
我卡在这部分了:replaceAll("_\\d\\d\\d\\d_\\d\\d_\\d\\d_\\d\\d_\\d\\d", "")
据我所知,它试图从名称中删除某些内容(可能是下划线“_”),但 _\\d\\d\\d\\d_\\d\\究竟是什么d_\\d\\d_\\d\\d_\\d\\d
谁能解释一下?
最佳答案
str.replaceAll("_\\d\\d\\d\\d_\\d\\d_\\d\\d_\\d\\d_\\d\\d", "")
获取字符串 str
并替换正则表达式 _\d\d\d\d_\d\d_\d\d_\d\d_ 的所有匹配项\d\d
没有任何内容(即 ""
)。 (之所以写成 \\d
而不是 \d
是因为 \
被转义了。)
在这种情况下,\d
表示“一个数字”。因此,它很可能会从字符串中删除日期/时间。例如,如果 str
是 "screenshot_from_stackoverflow_2016_03_30_23_47.jpg"
,它在 replaceAll
之后变为 screenshot_from_stackoverflow.jpg
。
要了解正则表达式、它们如何工作以及它们可以做什么,我建议您阅读它们,例如 regular-expressions.info .它有一个非常全面的 tutorial可用。
关于Java replaceAll() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36320282/