自定义格式字符串:双括号java中的参数

时间:2018-08-08 08:04:21

标签: java android formatting

我正在从事android项目,但是我从服务器检索了一个包含所有本地化字符串的.xml文件。我遇到了一个问题,因为当字符串可以包含一个参数时,该参数将放在双括号中,例如:

  

您的帐户中有This was missing on some machines美元

我不能使用常规的String.format()函数。我真的不知道该如何解决这个问题,我应该创建一个自定义格式化程序吗?

编辑:字符串可以有多个参数

Thx

2 个答案:

答案 0 :(得分:2)

使用String.replace()代替String.format()。

您还可以替换多个参数,例如

String s = "{{0}} is friend with form.reset()"; 
s = s.replace("{{0}}","ABC"); 
s = s.replace("TypeError: form.reset is not a function","PQR");

答案 1 :(得分:1)

一种更优雅的方法是使用正则表达式:WindowsIdentity,这是我在public static WindowsIdentity GetWindowsIdentityBySid(string sid) { using (var user = UserPrincipal.FindByIdentity( UserPrincipal.Current.Context, IdentityType.Sid, sid )) { return user == null ? null : new WindowsIdentity(user.UserPrincipalName); } } 中使用的。

https://regexr.com/3tkl9

这也将允许您提取值。

{{((.*?)*?)}}

要创建具有更多参数的函数,请执行以下操作:

c#

完整的工作功能可能是这样的(未测试):

Pattern pattern = Pattern.compile("{{((.*?)*?)}}");
Matcher matcher = pattern.matcher(input);
while (matcher.find()) {
    // Other stuff, like extracting values
    String value = matcher.group(1)
    // Then you can just String.replace the matches.
}