替换特定位置的子串

时间:2012-11-28 11:50:05

标签: java

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

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

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

5 个答案:

答案 0 :(得分:5)

您无需在此处使用String.replace方法。如果您知道要替换的确切索引,并且您确定它们将始终相同,那么您可以使用子字符串和字符串连接:

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

查看在线工作:ideone

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

答案 1 :(得分:4)

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

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);

奖励:如果日期不是预期格式,您将获得有用的例外

答案 2 :(得分:1)

这是一个日期/时间。 将其视为,将上述内容解析为合适的日期/时间对象,并使用与日期/时间相关的方法对其进行操作。这样您就不必依赖substrig / regexp等,也不会冒着创建无效日期/时间参考的风险。

e.g。使用SimpleDateFormatCalendarJoda-Time来获得更直观,更健壮的API。

目前,您有一个字符串型系统,而不是型系统。

答案 3 :(得分:0)

你也可以要求第一个':'并添加“00:00”然后

String date="2012-11-28 18:18:18";
int i = date.indexOf(':');
String format = date.substring(0,i+1) + "00:00";

答案 4 :(得分:0)

我认为您的解决方案不起作用,因为替换方法具有此签名

public String replace(char oldChar, char newChar)

public String replace(String oldChar, String newChar)

这个答案是为了解问题,解决问题,考虑其他好的答案!