有没有办法使用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.");
}
似乎我应该能够使用正则表达式进行此操作,但是大量的谷歌搜索,阅读和实验并没有产生任何有用的东西。
答案 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." );
}
两次更改
答案 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());