replaceAll by function返回值[gwt]

时间:2014-09-05 13:47:40

标签: java gwt

是否可以执行以下操作:

calculate(String match) {
    if (match.equals("expr"))
      return "no time";
    else
      return "some time";
}

String text = "You have {expr} or {other} left";
text = text.replaceAll( "{(.+)}", calculate(match) );

大括号内的值,如“expr”,将以某种方式在函数 calculate(“expr”)中处理,结果将用作替换 ?生成的String应该如下所示

"You have no time or some time left"

我知道这样的事情在javascript中是可能的,但我不知道如何在GWT中这样做

2 个答案:

答案 0 :(得分:0)

这不是你想要的,但它应该给你以后的结果:

public static String calculate( String text )
{
    String regex = "[{][^{]+[}]", replacement = "";
    Pattern p = Pattern.compile(regex);
    Matcher m = p.matcher(text);
    while ( m.find() )
    {
        String match = m.group();

        if ( "{expr}".equals(match) ) replacement = "X";
        else replacement = "Y";

        text = text.replaceFirst(regex, replacement);
    }

    return text;
}

然后使用它:

String text = "You have {expr} or {other} left";
System.out.println(calculate(text));

答案 1 :(得分:0)

您可以使用Java's String-format。在你的例子中,这将是这样的:

String text = "You have %s left";
String resultText = String.format(text, calculate(match));

根据calculate的返回值,resultText是以下两者之一:

"You have some time left"
"You have no time left"

%s用于字符串。在提供的链接中,您可以看到许多其他选项。

您还可以在单​​个字符串中使用多个%-options

String text = "You have %s left to do the following task: %s";
String resultText = String.format(text, calculate(match)), "Programming in Java");
// OR
String resultText2 = String.format(text, new String[]{ calculate(match), "Programming in Java" });