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