我有一个
String name = " abc_efg_the_xyz_24_Mar_2016.csv ";
我想将24_Mar_2016
替换为"18_Jan_2016"
。这样新的字符串就变成了:
"abc_efg_the_xyz_18_Jan_2016.csv"
我该怎么办?
此外,问题是字符串名称中的日期部分将始终保持不变,因此我无法进行模式搜索并替换为新日期。
请帮忙
答案 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)
可以使用Pattern和Matcher
来切断旧日期。
但我认为无论如何你都会创建一个新文件,然后你也会知道在日期之前使用的前缀。所以恕我直言,没有必要“改变”旧的文件名......
答案 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);
答案 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...
,我不确定是否有相同的匹配模式,你不想要替换。