Java Matcher 组输出问题

标签 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 返回有趣的文本

最佳答案

正如其他人已经说过的那样,使用 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/

相关文章:

java - 具有内部存储的内容提供商

java - 强制 maven 重新导入的 IntelliJ 快捷方式

Java 正则表达式问题?

java - 正则表达式:?: notation(问号和冒号)

java - 将 Eclipse 更改为 UTF-8 编码后文本损坏

java - org.hibernate.MappingException : Could not configure overrides from file: hibernate. reveng.xml

java - 具有自定义光标适配器的 ListView 为空

ios - Swift,电话号码正则表达式

java - 如何为这些路径表达式编写正则表达式

java - 如何使用java将反斜杠替换为正斜杠?