2015-08-11 2 views
1

Итак, у меня есть этот код;Замена строк номером в нем без петли

for (int i = 1; i <= this.max; i++) { 
    in = in.replace("{place" + i + "}", this.getUser(i)); // Get the place of a user. 
} 

Который работает хорошо, но я хотел бы просто держать его в простой (с помощью сопоставления с образцом) поэтому я использовал этот код, чтобы проверить, соответствует ли это;

System.out.println(StringUtil.matches("{place5}", "\\{place\\d\\}")); 

Спички StringUtil;

public static boolean matches(String string, String regex) { 
    if (string == null || regex == null) return false; 
    Pattern compiledPattern = Pattern.compile(regex); 
    return compiledPattern.matcher(string).matches(); 
} 

Который возвращает истину, тогда приходит следующая часть мне нужна помощь, заменив {place5}, так что я могу разобрать номер. Я мог бы заменить «{place» и «}», но что, если их было несколько в строке («{place5} {username}»), тогда я больше не могу этого делать, насколько мне известно , если вы знаете, есть ли простой способ сделать это, то, пожалуйста, дайте мне знать, если нет, я могу просто придерживаться цикла for.

+0

Вы имеете в виду, что вам просто нужно получить номер после 'place'? 's = s.replaceAll (". * \\ {place (\\ d +)}. * "," $ 1 ");'? Просьба представить пример ввода и вывода. –

+0

Доступен ли 'replaceAll()'? –

+0

Да, это сработало. Благодаря! :) – xErik75125690x

ответ

2

затем приходит следующая часть мне нужна помощь, заменив {place5}, так что я могу разобрать номер

Для того, чтобы получить номер после {place, вы можете использовать

s = s.replaceAll(".*\\{place(\\d+)}.*", "$1"); 

Регулярное выражение соответствует произвольному количеству символов перед строкой, которую мы ищем, затем {place, затем мы сопоставляем и capture 1 или более цифр с (\d+), а затем мы сопоставим остальную строку с .*. Обратите внимание, что если строка имеет символы новой строки, вы должны добавить (?s) в начале шаблона. $1 в шаблоне замены «восстанавливает» требуемое значение.