有没有办法用正则表达式重新格式化Java String?

时间:2010-12-03 16:09:51

标签: java regex

有没有办法使用Java正则表达式将String更改为某种格式?例如,我有一个包含日期和输入的输入字符串。可以使用各种分隔符输入的时间,我可以使用正则表达式来更改它以使用特定的分隔符吗?如果可以,我该怎么办?目前我只是使用正则表达式检查输入,然后将新的String与所需的分隔符连接在一起,如下所示:

Pattern dtPatt = Pattern.compile("\\d\\d\\d\\d[/\\-.]\\d\\d[/\\-.]\\d\\d[tT/\\-.]\\d\\d[:.]\\d\\d[:.]\\d\\d");
Matcher m = dtPatt.matcher(dtIn);
if (m.matches()) {
    String dtOut = dtIn.substring(0, 4) + "/" + dtIn.substring(5, 7) + "/" + 
                   dtIn.substring(8, 10) + "-" + dtIn.substring(11, 13) + ":" +
                   dtIn.substring(14, 16) + ":" + dtIn.substring(17, 19);
    // do processing with dtOut
} else {
    System.out.println("Error!  Bad date/time entry.");
}

似乎我应该能够使用正则表达式进行此操作,但是大量的谷歌搜索,阅读和实验并没有产生任何有用的东西。

3 个答案:

答案 0 :(得分:3)

尝试以下

    Pattern dtPatt = Pattern.compile( "(\\d\\d\\d\\d)[/\\-.](\\d\\d)[/\\-.](\\d\\d)[tT/\\-.](\\d\\d)[:.](\\d\\d)[:.](\\d\\d)" );
    Matcher m = dtPatt.matcher( str );

    if ( m.matches() )
    {
        StringBuffer sb = new StringBuffer();
        m.appendReplacement( sb, "$1/$2/$3-$4:$5:$6" );

        String result = sb.toString();
    }
    else
    {
        System.out.println( "Error!  Bad date/time entry." );
    }

两次更改

  • 使用()
  • 更改正则表达式模式以进行分组
  • 将appendReplacement与替换模式一起使用,其中$ x使用与模式匹配的特定组。

答案 1 :(得分:2)

我会尝试

DateFormat DF = new SimpleDateFormat("yyyy/MM/dd-HH:mm:dd");

String dtIn2 = String.format("%s/%s/%s-%s:%s:%s", dtIn.split("\\D+"));
DF.parse(dtIn2); // to validate the date produced.

答案 2 :(得分:1)

尝试使用匹配器的appendReplacement()appendTail()方法。 appendReplacement()中有一个很好的例子:

Pattern p = Pattern.compile("cat");
Matcher m = p.matcher("one cat two cats in the yard");
StringBuffer sb = new StringBuffer();
while (m.find()) {
    m.appendReplacement(sb, "dog");
}
m.appendTail(sb);
System.out.println(sb.toString());