如果我有一个像这样的字符串:
String str = "startDate:23/04/2016;endDate:;renewDate;"
需要对字符串进行多次操作。我需要获取一个String并使用分隔符(“;”)提取不同的子字符串,然后再次使用分隔符提取不同的子字符串以形成键值(“:”)。如果针对该键,则它们都不是值,则使用diff-diff默认值进行更新,例如(“ 01/01/2000”,“ 01/01/1900” ,因为两者均为Date类型)。< br />
如果您注意到 renewDate 字段不是分隔符(“:”),在这种情况下,我们需要将分隔符与默认值(:01/01 / 1900),这样我的预期结果将是:
String str = "startDate:23/04/2016;endDate:01/01/2000;renewDate:01/01/1900;"
我在正则表达式下进行了尝试,但不适用于所有情况:
String regExpression = "(?<=\\bendDate:)[;]+"
str = str.replaceAll(regExpression , "01/01/2000");
任何人都可以指导我如何使用正则表达式获得结果。谢谢!!!!
答案 0 :(得分:1)
正如Tim所说,我们可以使用正则表达式模式替换该值。除了他的答案,我建议唯一的更改是在用于文本renewDate和endDate的模式中添加冒号(:)作为可选。
String endDate = "01/01/2000";
String renewDate = "01/01/1900";
String str = "startDate:23/04/2016;endDate:;renewDate;";
str = str.replaceAll(";endDate:?;", ";endDate:"+endDate+";");
str = str.replaceAll(";renewDate:?;", ";renewDate:"+renewDate+";");
System.out.println(str);
这将给出如下输出
startDate:23/04/2016;endDate:01/01/2000;renewDate:01/01/1900;
答案 1 :(得分:0)
使用正则表达式替换,我们可以尝试:
String endDate = "01/01/2000";
String renewDate = "01/01/1900";
String str = "startDate:23/04/2016;endDate:;renewDate:;";
String output = str.replaceAll("\\bendDate:;", "endDate:" + endDate + ";")
.replaceAll("\\brenewDate:;", "renewDate:" + renewDate + ";");
System.out.println(output);
此打印:
startDate:23/04/2016;endDate:01/01/2000;renewDate:01/01/1900;
这里的逻辑是只针对空的结束日期和续订日期字段,如果需要,还包括默认值。
答案 2 :(得分:0)
或者,根据您的第一个定界符;
然后是:
分隔字符串。
String str = "startDate:23/04/2016;endDate:;renewDate;";
String dates[] = str.split(";");
for(String date : dates){
String default[] = date.split(":");
output.append(default[0] + ":" + (default.length > 1 ? default[1] : defaultDate));
}