Java 检查中间字符串是否以特定模式开始和结束,并更新该字符串

Java 检查中间字符串是否以特定模式开始和结束,并更新该字符串,java,regex,string,Java,Regex,String,如果我有一个字符串,比如: String str=“开始日期:2016年4月23日;结束日期:;续订日期;” 需要对字符串执行多次操作。我需要获取一个字符串并使用分隔符(“;”)提取不同的子字符串,然后再次使用分隔符(“:”)提取不同的子字符串以形成键值。如果键上没有值,则使用diff-diff默认值显示更新,如(“01/01/2000”、“01/01/1900”,因为两者都是日期类型)。 如果您注意到续订日期字段没有分隔符(“:”)在这种情况下,我们需要附加分隔符以及默认值(:01/01/19

如果我有一个字符串,比如:
String str=“开始日期:2016年4月23日;结束日期:;续订日期;”


需要对字符串执行多次操作。我需要获取一个字符串并使用分隔符(“;”)提取不同的子字符串,然后再次使用分隔符(“:”)提取不同的子字符串以形成键值。如果键上没有值,则使用diff-diff默认值显示更新,如(“01/01/2000”、“01/01/1900”,因为两者都是日期类型)。

如果您注意到续订日期字段没有分隔符(“:”)在这种情况下,我们需要附加分隔符以及默认值(:01/01/1900),以便我的预期结果如下:
String str=“开始日期:2016年4月23日;结束日期:2000年1月1日;续订日期:1900年1月1日;”

我尝试了下面的正则表达式,但它不适用于所有场景:


String regExpression=“(?使用正则表达式替换,我们可以尝试:

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;

这里的逻辑是只针对空的结束和续订日期字段,如果需要,包括默认值。

正如Tim所说,我们可以使用正则表达式模式来替换该值。除了他的答案之外,我建议的唯一更改是在文本中用于续订日期和结束日期的模式中添加冒号(:)作为可选

    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;

或者,根据第一个分隔符
分隔字符串

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