LINUX.ORG.RU

простой вопрос по java


0

0

Доброго времени суток.
Подскажите пожалуйста:
..........
String code

//code=Configuration Validation failed. Reason: ${server} for ${client}

...........
Вопрос: как с помощь replace, или как вообще ее преобразовать в
вид:
Сonfiguration Validation failed. Reason: %1$s for %2$s

Что бы каждое значение ${asdd} ставильло в сообвецтвии %N$s, где N его номер.

я пробывал типа:
for(int i=0; code.indexOf(«{») != -1 ;i++)
       {
code=code.replace(«\\$\\{([a-zA-Z0-9_]+)\\}»,«%»+(i+1)+«$s»);
       }
это не правильно.
Заранее огромное спасибо!

Ответ на: комментарий от Begemoth

code = «Configuration Validation failed. Reason: ${server} for ${client}»

это подстроки

virvdova ()
$ echo 'Configuration Validation failed. Reason: ${server} for ${client}' | perl -Wpne '$i=1; while(s/\$\{[^}]+}/\%$i\$s/) {$i++;}'
Configuration Validation failed. Reason: %1$s for %2$s

явовские регекспы читать и писать тяжело, я пробовал :-)

www_linux_org_ru ★★★★★ ()
Ответ на: комментарий от www_linux_org_ru

    for(int i=0; code.indexOf(«${») != -1 ;i++)
    {
    int position = i,position2;
       if ((position = code.indexOf(«${»)) != -1)
       {
       String st=«%»+(i+1)+«$s»;
       position2 = code.indexOf(«}»)+1;
       code=code.substring(0,position)+st+code.substring(position2);
       }
    }
Это рабочий вариант.
Вопрос - а есть что то готовое? что бы не использовать такой код!

virvdova ()
Ответ на: комментарий от virvdova
import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class TestRegex {

    public static void main(String[] args) {
        Pattern p = Pattern.compile("\\$\\{[^}]+\\}");
        Matcher m = p.matcher("Configuration Validation failed. Reason: ${server} for ${client}");

        int num = 0;
        StringBuffer sb = new StringBuffer();

        while (m.find()) {
            m.appendReplacement(sb, "%" + ++num + "\\$s");
        }
        m.appendTail(sb);
        
        System.out.println(sb.toString());
    }
}
ef37 ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.