Java String:用多个值替换字符串

时间:2012-11-12 21:59:56

标签: java regex replace

我正在构建一个用多个变量替换给定字符串的配置文件,我很难解释它,所以也许最好向你展示我的意思:

以下方法将与String一起使用:Hello~欢迎来到〜!

private static String REPLACE_CHAR = "~";

public static String parse(String key, String... inputs) {
    int cache = matchCache.get(key, -1);
    String value = customConfig.getString(key);
    if (cache == -1) {
        cache = StringUtils.countMatches(value, REPLACE_CHAR);
        matchCache.put(key, cache);
    }
    for (int i = 0; i < cache; i++) {
        value = value.replaceFirst(REPLACE_CHAR, inputs[i]);
    }
    return value;
}

用第一个输入替换〜的最快方法是什么,然后移到第二个〜依此类推......

现在我没有使用别人代码的主要原因是: 理想情况下,我想创建一个不同的可替换字符的列表,这些字符将自动替换变量,所以在同一个代码中,我能够给它没有输入,但它会检查列表中的可替换字符并执行这样的方法作为getYourName() 每次都不需要检查此列表,因此仍可以编译模式吗?

我这样做是为了学习效率,在正则表达方面我缺乏能力!

1 个答案:

答案 0 :(得分:2)

如果您正在寻找效率,可以使用正则表达式实例化Matcher,然后使用find()方法查找事件,将每个事件的替换添加到{{1} }。

StringBuffer

这样,您可以避免在private Matcher matcher = Pattern.compile("([~])").matcher(""); public String parse(String key, String... inputs) { String value = customConfig.getString(key); matcher.reset(value); StringBuffer sb = new StringBuffer(); int i = 0; while (matcher.find()) { String text = matcher.group(1); matcher.appendReplacement(sb, inputs[i++]); } matcher.appendTail(sb); return sb.toString(); } System.out.println(parse("foo", "T F C", "James Bond")); // prints "Hello T F C, my name is James Bond" // if customConfig.getString("foo") returns "Hello ~, my name is ~" 中涉及的每个循环期间从字符串的开头发现。但是,如果要验证String.replaceFirst的长度是否等于它,您仍然可以缓存找到的~个数。

上面的示例忽略了input[]中存储了正确条目数的事实。

可在此处找到Runnable示例:http://ideone.com/QfE03a