在String ArrayList中查找和替换

时间:2014-09-13 18:16:47

标签: java

public static int preaparePatternForJFugue(ArrayList <String> arrLst) {

    String contents;
    for(int loopIndex2=0;loopIndex2<arrLst.size();loopIndex2++) {
        contents=arrLst.get(loopIndex2);
        contents=contents.replaceAll(",", "Q");
        arrLst.set(loopIndex2, contents);
    }
}

是否有可能优化上述代码?代码基本上用于查找和替换ArrayList字符串中的字符串。我们是否有任何证据可以直接在ArrayList内查找和替换,而无需首先获取字符串然后替换?

对于cource,我们可以将最后3行组合在一起,如下所示。但这只会节省我猜的代码行数。

arrLst.set(loopIndex2, arrLst.get(loopIndex2).replaceAll(",", "Q"));

2 个答案:

答案 0 :(得分:3)

您可以编译Pattern,然后使用Matcher replaceAll()

Pattern p = Pattern.compile(",");
for (int loopIndex2 = 0; loopIndex2 < arrLst.size(); loopIndex2++) {
    Matcher matcher = p.matcher(arrLst.get(loopIndex2));
    arrLst.set(loopIndex2, matcher.replaceAll("Q"));
}

答案 1 :(得分:2)

有各种方法可以改善这一点。当然,你需要决定你可以做些什么权衡:

  1. 如果字符串很小,使用正则表达式会增加太多开销。您 可以先检查角色是否是目标的一部分并跳过它 如果不是if(!contents.contains(",")){next;}这循环 通过你的字符串,对于小字符串,它也不错。如果 字符串很小你也可以自己扫描字符串并替换 “就地”(因为字符串是不可变的所以不是真的到位,所以你需要创建一个新字符串,但你明白了。)
  2. 如果字符串足够大,则可以选择正则表达式,所以请按照 回答@Elliott Frisch并保存不断的创作 循环中的模式。
  3. 您没有解释为什么要使用逗号添加字符串。 您可以创建列表的包装,然后添加即可剥离 在将不需要的字符添加到列表本身之前关闭它们。上 同样的想法,你可以用逗号“标记”字符串 他们在另一个数据结构中的位置堆栈,以便在 循环你不需要遍历整个列表但“跳” 直接到元素并替换它们。如果列表可能会有所帮助 非常大。
  4. 当然,您需要在所有情况下进行测试以进行验证。如果您的数据集非常小并且您没有实际要求,那么请编写最简单,最直接的理解代码。