如本问题所述,我试图在 Java 中的 ArrayList 中的特定位置之后找到元素的索引。下面是我的实现:
import java.io.*;
import java.util.*;
class palindrome{
public static void main(String[] args)throws IOException {
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
int[] array = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).toArray();
int n=array[0];
List<StringBuilder> ls=new ArrayList<StringBuilder>();
while(n-->0){
ls.add(new StringBuilder(br.readLine()));
}
StringBuilder rev=ls.get(1).reverse();
System.out.println(rev);
int i=1;
System.out.println(ls.subList(i+1,ls.size()).indexOf(rev));
}
}
Run Code Online (Sandbox Code Playgroud)
我正在为程序提供以下输入
4 2
oo
ox
xx
xo
Run Code Online (Sandbox Code Playgroud)
所以,逻辑是我试图找到'ox'的反向索引,它应该返回3,但代码总是返回-1。我无法发现任何错误。请告诉我你们是否发现了任何错误。
谢谢你!
StringBuilders 是正在构建的进行中的字符串,因此它们不会覆盖equals(). 字符串生成器只会比较等于自身。它永远不会与任何其他构建器相等,即使是具有相同内容的构建器。
这意味着这indexOf()将不起作用,因为它依赖于equals(). 如果你想让它工作,你需要使用普通的Strings 而不是StringBuilders。例如:
List<String> ls = new ArrayList<>();
while (n-- > 0) {
ls.add(br.readLine());
}
String rev = new StringBuilder(ls.get(1)).reverse().toString();
Run Code Online (Sandbox Code Playgroud)
或者,如果您想坚持使用StringBuilders ,您只需放弃该indexOf()方法并通过手动for循环自己寻找匹配的字符串。