我想了解这段代码:
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
有人可以解释一下吗?
答案 0 :(得分:2)
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"
,则在screenshot_from_stackoverflow.jpg
之后变为replaceAll
。
要了解正则表达式,它们如何工作以及它们可以做什么,我建议您阅读它们,例如regular-expressions.info。它有一个非常全面的tutorial可用。
答案 1 :(得分:1)
据我所知,它试图从名称中删除一些东西(可能是下划线“_”),但究竟是什么 \ d \ d \ d \ d \ d \ d_ \ d \ D_ \ d \ D_ \ d \ d
这种模式将匹配此格式[0-9]
中的数字_XXXX_XX_XX_XX_
,并将其替换为""
,即无。
例如,
_7686_77_78_77_77
_0123_65_58_56_12
将在您的字符串中使用""
替换。
答案 2 :(得分:1)
\ d - 匹配数字[0-9]