Java replaceAll() 方法

Java replaceAll() method

我正在尝试理解这段代码:

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

有人可以解释一下吗?

as far as I know it is trying to remove something from the name (maybe the underscore "_" ) but what exactly is \d\d\d\d\d\d_\d\d_\d\d_\d\d

该模式将以这种格式 _XXXX_XX_XX_XX_ 匹配数字 [0-9] 并将其替换为 "" 即什么都没有。

例如,

_7686_77_78_77_77
_0123_65_58_56_12

将在您的字符串中替换为 ""

\d - 匹配数字 [0-9]

Java RegEx

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 表示 "a digit"。因此,更有可能的是,它从字符串中删除了 date/time。例如,如果 str"screenshot_from_Whosebug_2016_03_30_23_47.jpg",则在 replaceAll 之后变为 screenshot_from_Whosebug.jpg

要了解正则表达式、它们的工作原理和功能,我建议您阅读它们,例如 regular-expressions.info. It has a pretty comprehensive tutorial available。