2014-09-05 3 views
0

Можно ли сделать что-то вроде:replaceAll по функции возвращаемого значения [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»), и результат будет использоваться в качестве замены? Полученная строка должна выглядеть следующим образом

"You have no time or some time left" 

Я знаю, что что-то подобное можно в JavaScript, но я не знаю, как сделать это в GWT

+0

Не было бы возможно добавить 'Text' в качестве дополнительного параметра метода' calculate' - то в этом методе вы вычистить выражение, обрабатывать его и возвращать результат? – munyul

+0

Я не уверен, понимаю ли я. Я отредактировал свой вопрос, чтобы сделать его более ясным, чего я ожидал, но спасибо в любом случае – Xear

+0

http://www.gwtproject.org/doc/latest/DevGuideI18nMessages.html –

ответ

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)); 
0

вы с ould использовать Java's String-format. В вашем примере это будет что-то вроде этого:

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

на основе возвращения из стоимости, то 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" }); 
+0

Я не думаю, что это то, чего я ожидал. Я редактировал свой вопрос, потому что «match» должен быть найденным «expr» или «other». Извините за эту путаницу – Xear

Смежные вопросы