我想检查是否可以替换 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 的元素,所以该怎么做?
答案 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);
}