在没有for循环的情况下用其中的数字替换字符串

时间:2015-08-11 20:16:01

标签: java regex parseint

所以我目前有这个代码;

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();
}

返回true,然后是我需要帮助的下一部分,替换{place5}以便我可以解析数字。我可以替换&#34; {place&#34;和&#34;}&#34;,但是如果字符串中有多个(&#34; {place5} {username}&#34;),那么我就不能再这样做了,据我所知,如果您知道是否有一种简单的方法可以做到,请告诉我,如果不是,我可以坚持使用for循环。

1 个答案:

答案 0 :(得分:2)

  

然后是我需要帮助的下一部分,替换{place5}以便我可以解析数字

为了获得{place之后的数字,您可以使用

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

正则表达式在我们搜索的字符串之前匹配任意数量的字符,然后匹配{place,然后我们匹配并捕获 1个或多个数字(\d+),然后我们将字符串的其余部分与.*匹配。请注意,如果字符串具有换行符号,则应在模式的开头附加(?s)。替换模式中的$1“恢复”我们需要的值。