Java Matcher组输出问题

时间:2014-05-23 10:25:17

标签: java regex

我想使用正则表达式将日期字符串从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返回有趣的文字

2 个答案:

答案 0 :(得分:0)

正如其他人已经说过使用DateFormat更适合这个目的,可能你已经找到了问题的解决方案。但是当我尝试运行你的代码时,我确实能够复制你提到的内容。

令人惊讶的是,根据输出的流量,我得到了不同的字符。输出与你的正则表达式expr无关。无论如何,你可以通过编写像

这样简单的东西来获得相同的东西
System.out.println((char) 3 + "." + (char) 2 + "." + (char) 1);

这里,代码点3,2和1的解释方式不同,具体取决于使用它们的上下文。它们可以分别解释为控制字符ETX,STX和SOH,或者在视频显示设备上使用时可以解释为图形符号。

我的日食输出:
└.┐.┌
(Eclipse控制台可能映射到错误的Windows Glyph List 4个字符)

DOS输出:
♥.☻.☺
(这里Code page 437正在使用中)

答案 1 :(得分:0)

为什么不呢:

String newDate = date.replaceAll("(\\d{4})-(\\d\\d)-(\\d\\d)", "$3.$2.$1");