在java中动态替换字符串的内容

时间:2016-12-22 10:08:01

标签: java string replace

我有一个

String name = " abc_efg_the_xyz_24_Mar_2016.csv "; 

我想将24_Mar_2016替换为"18_Jan_2016"。这样新的字符串就变成了:

"abc_efg_the_xyz_18_Jan_2016.csv" 

我该怎么办?

此外,问题是字符串名称中的日期部分将始终保持不变,因此我无法进行模式搜索并替换为新日期。

请帮忙

5 个答案:

答案 0 :(得分:3)

你在这里问两件事。第一个问题的回答是:

String name = " abc_efg_the_xyz_24_Mar_2016.csv ";
String olddate = "24_Mar_2016";
String newdate = "18_Jan_2016";

// use replaceAll() if there will be multiple occurences the date
String replaced = name.replace(olddate, newdate);

第二个问题需要一个与命名约定使用的日期格式匹配的正则表达式。

答案 1 :(得分:2)

可以使用PatternMatcher来切断旧日期。

但我认为无论如何你都会创建一个新文件,然后你也会知道在日期之前使用的前缀。所以恕我直言,没有必要“改变”旧的文件名......

答案 2 :(得分:2)

假设您的日期始终具有以下约定: dd_mmm_yyyy 且该文件的名称仅包含 ONE 日期。您可以使用String.replaceAll(..)String.replaceFirst(..)和正则表达式来解决此问题。阅读有关正则表达式here的更多信息。

String replaceDate = "12_Feb_2017";
String name = "abc_efg_the_xyz_24_Mar_2016.csv ";

name = name.replaceAll("\\d{2}_[a-zA-Z]{3}_\\d{4}", replaceDate);

这是ideone demo

答案 3 :(得分:1)

其中一种方式:

String name = " abc_efg_the_xyz_24_Mar_2016.csv ";
name = name.replace("24_Mar_2016", "18_Jan_2016"); 

答案 4 :(得分:1)

我假设您的name始终具有相同的日期格式和日期字符串的位置,但name中的日期值可能不同。

String name = "abc_efg_the_xyz_24_Mar_2016.csv";
System.out.println(name.replaceFirst(".{11}(?=[.][^.]+$)","Happy_NEW_YEAR"));

这将打印:

abc_efg_the_xyz_Happy_NEW_YEAR.csv
  • ".{11}(?=[.][^.]+$)"是正则表达式,以匹配最后一个句点(.)之前的11个字符,在您的情况下,它匹配日期格式xx_xxx_xxxx(长度:11)

  • replaceFirst只会进行一次替换。我没有使用模式\d{2}_\w{3}_\d{4},因为我看到你的字符串中有其他abc_efg...,我不确定是否有相同的匹配模式,你不想要替换。