替换特定位置的子字符串

3
String date = "2012-11-28 12:30:30";

我想使用 String.replace 方法将日期替换为 2012-11-28 12:00:00,如下:

String replacedDate = date.replace(date.substring(14, 19), "00:00");

它的运行良好,但如果日期是:

String date = "2012-11-28 18:18:18";

使用上述方法的结果将是2012-11-28 00:00:28,但我希望输出的结果是2012-11-28 18:00:00


8
把字符串解析成日期,对日期对象进行操作,然后再转换回字符串,这样怎么样? - assylias
@KARASZIIstván,我在提交我的编辑时没有看到你的编辑! - 11684
5个回答

5

在这里你不需要使用String.replace方法。如果你知道你想要替换的确切索引,并且你确定它们总是相同的,那么你可以使用substring和字符串连接:

String date = "2012-11-28 12:30:30";
date = date.substring(0, 14) + "00:00";

在线查看演示: ideone

注意:如果您的字符串实际上代表一个日期,请考虑使用类型为Date的变量,而不是String


4

您可以使用忽略分钟和秒钟的日期解析器,而不是直接操作字符串:

String s = "2012-11-28 12:30:30";
//skip the minutes, seconds
Date date = new SimpleDateFormat("yyyy-MM-dd HH").parse(s); 

String result = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);
System.out.println("result = " + result);

奖励:如果日期不符合预期格式,您将获得有用的异常提示


1

这是一个日期/时间。通过将上述内容解析为适当的日期/时间对象并使用与日期/时间相关的方法进行操作,将其视为日期/时间。这样,您就不必依赖于substrig/regexps等,并且不会出现创建无效日期/时间引用的风险。

例如,使用SimpleDateFormatCalendar,或者使用更直观和强大的APIJoda-Time

目前,您拥有的是一个“stringly”类型的系统,而不是一个强类型的系统。


0
你也可以寻找第一个冒号并添加“00:00”。
String date="2012-11-28 18:18:18";
int i = date.indexOf(':');
String format = date.substring(0,i+1) + "00:00";

0

我认为你的解决方案不起作用,因为replace方法具有以下签名

public String replace(char oldChar, char newChar)

不是

public String replace(String oldChar, String newChar)

这个答案旨在理解问题,要解决它,请考虑其他优秀的答案!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接