Java 用不同的值替换长字符串的部分

Java 用不同的值替换长字符串的部分,java,string,java-8,Java,String,Java 8,我有一根像下面这样的绳子 String textToShow=“应用程序[%ApplicationName%]:从[%Date%][%Time%]开始” 我需要用不同的值替换[%和%]之间的字符串 我确实喜欢下面的内容,但它只适用于第一个,即“ApplicationName” 如果出现更多类似的部分,我如何使它在不进一步拆分的情况下对整个字符串起作用 有没有更好的不拆分的方法 注意:我从数据库中获取此字符串,因此无法更改该字符串。我只需要根据字符串的名称替换[%和%]之间的部分。例如,如果是日期

我有一根像下面这样的绳子

String textToShow=“应用程序[%ApplicationName%]:从[%Date%][%Time%]开始”

我需要用不同的值替换
[%
%]
之间的字符串

我确实喜欢下面的内容,但它只适用于第一个,即“ApplicationName”

如果出现更多类似的部分,我如何使它在不进一步拆分的情况下对整个字符串起作用

有没有更好的不拆分的方法

注意:我从数据库中获取此字符串,因此无法更改该字符串。我只需要根据字符串的名称替换
[%
%]
之间的部分。例如,如果是日期,则必须用日期等替换它。

关于:

String textToShow = "Appplication [%ApplicationName%]: started at [%Date%][%Time%]"
textToShow = textToShow.replace("[%ApplicationName%]","your new string here");
textToShow = textToShow.replace("[%Date%]","your new date here");
textToShow = textToShow.replace("[%Time%]","your new time here");
更直接、更容易和更少的错误修剪

您可以使用

所以您可以声明格式

private static final String FORMAT = "Appplication %s: started at %s%s"
然后,每当您必须用字符串替换
%s
,您都可以这样做

String.format(FORMAT, applicationName, date, time)
提供了所需的逻辑,可用于高效替换字符串中任意数量的变量,请参见和:

请注意,此API没有引入
StringBuilder
,因此我们必须在此处使用
StringBuffer
。那太好了



请注意,
appendReplacement
为替换字符串中出现的
$
\
字符赋予特殊含义。如果您怀疑它们出现在替换字符串中,但希望按字面插入字符串,则可以使用,即
m.appendReplacement(sb,Matcher.quoteReplacement(replacement))

实际上这不是一个选项。我从数据库中得到这个字符串。所以我不能换绳子。这很漂亮。我不知道这件事。非常感谢你。我希望你的回答能像帮助我一样帮助很多人。:)
String.format(FORMAT, applicationName, date, time)
public String processText(String stringToShow, String appname) {
    Matcher m=Pattern.compile("\\[%(\\w+)%\\]").matcher(stringToShow);
    if(!m.find()) return stringToShow;
    StringBuffer sb=new StringBuffer();
    do {
        String replacement;
        switch(m.group(1).toLowerCase(Locale.ROOT)) {
            case "applicationname":
                replacement=appname;
                break;
            case "datetime":
                replacement = LocalDateTime.now().format(
                    DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
                break;
            case "date":
                replacement = LocalDate.now().format(
                    DateTimeFormatter.ofPattern("yyyy-MM-dd"));
                break;
            case "time":
                replacement = LocalTime.now().format(
                    DateTimeFormatter.ofPattern("HH:mm:ss"));
                break;
            default:
                replacement = "Invalid";
        }
        m.appendReplacement(sb, replacement);
    } while(m.find());
    return m.appendTail(sb).toString();
}