检查中间字符串是否以某些模式开头-结尾并更新字符串

时间:2019-10-31 06:30:12

标签: java regex string

如果我有一个像这样的字符串:
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");

任何人都可以指导我如何使用正则表达式获得结果。谢谢!!!!

3 个答案:

答案 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));
}