如何替换arraylist中的元素包含元素,如stringbuilder类型的字符串

时间:2018-06-23 05:33:27

标签: java arraylist collections stringbuilder

我想检查是否可以替换 ArrayList 中的元素,该数组包含Stringbuilder

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;

public class IterationDemo {
    public static void main(String[] args) {
        ArrayList< StringBuilder> arrayList=new ArrayList<>();
        arrayList.add(new StringBuilder("shruti"));
        arrayList.add(new StringBuilder("shri"));
        arrayList.add(new StringBuilder("samadhan"));
        arrayList.add(new StringBuilder("suruti"));
        arrayList.add(new StringBuilder("shreyas"));
        for(StringBuilder  str:arrayList){
            str.append("-->kharge");
        Collections.replaceAll(arrayList, "shreyas",new StringBuilder("prajyot"));
            System.out.println(str);

        }     
}}

在这里我想用 Prajyot
替换名称为 shreyas 的元素,所以该怎么做?

3 个答案:

答案 0 :(得分:1)

这里没有理由使用StringBuilder。将它们更改为String个对象,更新它们变得非常简单:

public static void main(String[] args) {
    ArrayList<String> arrayList = new ArrayList<>();
    arrayList.add("shruti");
    arrayList.add("shri");
    arrayList.add("samadhan");
    arrayList.add("suruti");
    arrayList.add("shreyas");

    for (String str :
        arrayList) {
        str = str.replaceAll("shreyas", "prajyot");
        System.out.println(str);
    }
}

答案 1 :(得分:0)

您的方法行不通,因为您将String作为第一个参数传递,并且列表中包含StringBuilder,因此该方法将永远找不到匹配项。

第一个想法可能是像这样传递StringBuilder

Collections.replaceAll(arrayList, new StringBuilder("shreyas"),new StringBuilder("prajyot"));

但是StringBuilder不会覆盖equals,因此它使用的是Object实现,它等效于引用相等(==),因此找不到匹配项要么。

因此,您必须遍历列表,手动查找和操作元素。 多种实现方式之一是:

for (buffer : arrayList) {
    if (buffer.toString.equals(""shreyas") {
         buffer.delete(0, buffer.length() -1)
         buffer.append("prajyot");
    }
}

请注意,此版本不会代替StringBuilder,而是会对其进行更改。要替换它,您必须使用数组索引或使用Streams进行迭代。

答案 2 :(得分:0)

Collections.replaceAll(arrayList, "shreyas",new StringBuilder("prajyot"));
            System.out.println(str);

正如詹斯所说,在这里,您实际上并不是在指代“ shreyas”的原始StringBuilder对象。您已将 new 字符串对象提供给replaceAll方法。 我建议您改为这样做

public static void main(String[] args) {
        ArrayList< StringBuilder> arrayList=new ArrayList<>();
        new StringBuilder("shreyas");
        arrayList.add(new StringBuilder("shruti"));
        arrayList.add(new StringBuilder("shri"));
        arrayList.add(new StringBuilder("samadhan"));
        arrayList.add(new StringBuilder("suruti"));
        arrayList.add(new StringBuilder("shreyas"));
        Optional<StringBuilder> strToBeReplaced = arrayList.stream().filter(s -> s.toString().equals("shreyas")).findFirst();
        Collections.replaceAll(arrayList,strToBeReplaced.get(),new StringBuilder("Prajyot"));
        arrayList.forEach(System.out::println);
    }