GWT中String.format()的替代方案是什么?

GWT中String.format()的替代方案是什么?,gwt,Gwt,虽然GWT并不是模拟所有java的核心,但什么可以作为替代方案用于: String.format("The answer is - %d", 42)? 在GWT中,向消息注入参数的优雅高效模式是什么?一个优雅的解决方案是使用SafeHtml模板。您可以在如下界面中定义多个此类模板: 公共接口MyTemplates扩展了安全HtmlTemplates{ @模板(“答案是-{0}”) 安全HTML应答(int值); @模板(“…”) ... } 然后使用它们: publicstaticfinal

虽然GWT并不是模拟所有java的核心,但什么可以作为替代方案用于:

String.format("The answer is - %d", 42)?

在GWT中,向消息注入参数的优雅高效模式是什么?

一个优雅的解决方案是使用SafeHtml模板。您可以在如下界面中定义多个此类模板:

公共接口MyTemplates扩展了安全HtmlTemplates{
@模板(“答案是-{0}”)
安全HTML应答(int值);
@模板(“…”)
...
}
然后使用它们:

publicstaticfinalmytemplates=GWT.create(MyTemplates.class);
...
标签=新标签(模板。答案(42));
虽然这需要做更多的设置工作,但它有一个巨大的优势,即参数会自动进行HTML转义。有关详细信息,请参阅


如果您想更进一步,将您的信息国际化,请参见

您只需编写自己的
格式函数
,而无需进行头脑风暴

public static String format(final String format, final String... args,String delimiter) {
    String[] split = format.split(delimiter);//in your case "%d" as delimeter
    final StringBuffer buffer= new StringBuffer();
    for (int i= 0; i< split.length - 1; i+= 1) {
        buffer.append(split[i]);
        buffer.append(args[i]);
    }
    buffer.append(split[split.length - 1]);
    return buffer.toString();
 }
公共静态字符串格式(最终字符串格式、最终字符串…参数、字符串分隔符){
String[]split=format.split(分隔符);//在您的示例中,将“%d”作为delimeter
最终StringBuffer=新StringBuffer();
对于(int i=0;i
因为大多数(99.999%)消息格式是静态的,在编译时就知道了,所以GWT的方法是在编译时解析它们


您通常会使用a来实现消息的本地化功能,但有时更需要0.001%中的
安全HTMLTemplates

,当编译时不知道模板时,您可以使用Javascript sprintf(请参见:)如下所示:


你可以自己写

我编写了一个只处理字符串(%s)的版本:

公共静态字符串格式(最终字符串格式、最终对象…args)
{
checkNotNull(格式);
checkNotNull(args);
最终字符串模式=“%s”;
int start=0,last=0,argsIndex=0;
最终StringBuilder结果=新建StringBuilder();
while((start=format.indexOf(pattern,last))!=-1)
{
如果(args.length argsIndex)
{
抛出新的IllegalArgumentException(“参数多于替换模式!”);
}
append(format.substring(last));
返回result.toString();
}

我对GWT了解不多,但我正在从事一个GWT项目,我需要这个

import java.text.MessageFormat;



MessageFormat.format("The answer is - {0}", 42);

我不知道项目的开发人员是否添加了一些特殊的东西来实现这一点,或者默认情况下它可以正常工作。

为什么不编写一个类似于:

String appendAnswer(int result) {
    return "The answer is - "  + Integer.toString(result);
}
正在解决您的问题,因为您不喜欢在代码中设置格式

如果遇到将整数/字节转换为十六进制字符串的问题,应使用:

Integer.toString(int, 16); 

@感谢您对我的帖子感兴趣。请提供评论。这样我可以改进我的答案。JRE仿真库中不存在,因此无法在客户端代码中使用。这对我有一次效果。我目前没有参与GWT项目。
String appendAnswer(int result) {
    return "The answer is - "  + Integer.toString(result);
}
Integer.toString(int, 16);