Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在ArrayList中搜索数据<;StringBuilder>;带索引_Java_Search_Arraylist_Stringbuilder_Indexof - Fatal编程技术网

Java 如何在ArrayList中搜索数据<;StringBuilder>;带索引

Java 如何在ArrayList中搜索数据<;StringBuilder>;带索引,java,search,arraylist,stringbuilder,indexof,Java,Search,Arraylist,Stringbuilder,Indexof,如何使用indexOf在ArrayList中搜索数据 ArrayList<StringBuilder> state = new ArrayList<StringBuilder>(); state.add(new StringBuilder("A")); state.add(new StringBuilder("B")); state.add(new StringBuilder("C")); state.add(new StringBuilder("D")); System

如何使用indexOf在ArrayList中搜索数据

ArrayList<StringBuilder> state = new ArrayList<StringBuilder>();
state.add(new StringBuilder("A"));
state.add(new StringBuilder("B"));
state.add(new StringBuilder("C"));
state.add(new StringBuilder("D"));
System.out.println(state.indexOf(new StringBuilder("B"))); //Out: -1
ArrayList state=new ArrayList();
添加(新的StringBuilder(“A”));
添加(新的StringBuilder(“B”));
添加(新的StringBuilder(“C”));
添加(新的StringBuilder(“D”));
System.out.println(state.indexOf(新StringBuilder(“B”))//出局:-1

这是因为它通过引用进行搜索,而您希望通过字符串生成器的内容进行搜索

boolean there = state.stream() // use streams API
                     .anyMatch(sb -> sb.toString().equals("B")); // check string equals

System.out.println(there); // print if it's there

您正在使用
StringBuilder
对象的
ArrayList

由于
StringBuilder
用于构建字符串,而不是实际的
String
s,因此不能使用
indexOf(s)
,因为整个对象本身应该与正在比较的对象相等,以便返回
true

为了解决此问题,您应该使用
StringBuilder
以您想要的方式构建
String
,并仅为已构建的
String
创建一个数组列表,如下所示:

ArrayList<String> state = new ArrayList<String>();
StringBuilder a = new StringBuilder("A")
//Do whatever you want to a
state.add(a.toString());
state.add(b.toString());
state.add(c.toString());
state.add(d.toString());
.....
System.out.println(state.indexOf("B")); //Out: 1
ArrayList state=new ArrayList();
StringBuilder a=新的StringBuilder(“a”)
//你想做什么就做什么
state.add(a.toString());
state.add(b.toString());
state.add(c.toString());
state.add(d.toString());
.....
System.out.println(state.indexOf(“B”))//输出:1

StringBuilder不会覆盖equals,因此您无法使用。请使用String而不是StringBuilder您实际要解决的问题是什么?