我想使用正则表达式将日期字符串从 YYYY-MM-DD 格式更改为 DD.MM.YYYY 格式。这是我的实现:
String date = "2008-12-30"; //30th Dec, 2008
String searchPattern = "(\\d{4})-(\\d\\d)-(\\d\\d)";
//Implementing the Pattern from searchPattern
Pattern pattern = Pattern.compile(searchPattern);
Matcher matcher = pattern.matcher(date);
String newDate = "";
if(matcher.find())
{
//Functions
newDate = matcher.replaceFirst(matcher.group(3)+"."+matcher.group(2)+"."+matcher.group(1));
//Issue with group text
// newDate = matcher.replaceFirst("\3.\2.\1");
}
如果我使用\1、\2 等捕获的组,输出将包含有趣的文本。所以,简单来说,问题是:
matcher.group(1) 函数 \1 返回有趣的文本
最佳答案
正如其他人已经说过的那样,使用 DateFormat 更适合该目的,并且可能您已经找到了问题的解决方案。但是当我尝试运行你的代码时,我确实能够复制你提到的内容。
令人惊讶的是,根据输出的流式传输位置,我得到了不同的字符。输出与您的正则表达式 expr 无关。无论如何,你可以通过编写像
这样简单的东西来得到相同的结果System.out.println((char) 3 + "." + (char) 2 + "." + (char) 1);
这里代码点 3、2 和 1 的解释不同,具体取决于使用它们的上下文。如果在视频显示设备上使用,它们可以分别解释为控制字符 ETX、STX 和 SOH 或图形符号。
eclipse 时的输出:
└.┐.┌
(Eclipse 控制台可能映射到错误的 Windows Glyph List 4 字符)
DOS 下的输出:
♥.☻.☺
(这里Code page 437正在使用)
关于Java Matcher 组输出问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23826792/