gpt4 book ai didi

java - 为什么字符串等于在我的代码中不起作用?

转载 作者:行者123 更新时间:2023-12-01 16:53:45 25 4
gpt4 key购买 nike

我已经检查了两个比较的字符串,但即使是值参数 str 和 temp 也打印为“mn”。 str.equals(temp) 仍然返回 false。

public int strStr(String haystack, String needle) {
StringBuffer str=new StringBuffer(needle);

int result=-1;

for(int i=0;i<=haystack.length()-needle.length();i++){
StringBuffer temp = new StringBuffer(haystack.substring(i, i+needle.length()));

System.out.println(temp.equals(str));
System.out.println(temp+"="+str);

if (str.equals(temp)){
result=i;
break;
}
}
return result;
}

最佳答案

您正在比较两个 StringBuffer 对象。 StringBufferequals(Object) 方法继承自 Object,并且定义为与比较对象引用相同。

对象不同,因此示例中的结果为 false

试试这个:

      if (str.toString().equals(temp.toString())){

这是有效的,因为 String.equals(Object) 比较的是字符串值,而不是字符串对象引用。 (但请注意,您必须转换两个 StringBuffer 对象,因为如果参数不是 StringString.equals(Object) 将始终返回 false > 对象。)

另请注意,使用 str 作为 StringBuffer 变量的名称非常容易产生误导。大多数人会期望名为 str 的东西是一个 String。 (我做到了!)

<小时/>

FWIW,我正在绞尽脑汁寻找一种更有效的方法来比较两个 StringBuffer 对象的内容。上面的代码创建并丢弃两个临时 String 对象。我能想到的最好办法就是手动编码;例如像这样的东西:

    public boolean equalBuffers(StringBuffer sb1, StringBuffer sb2) {
if (sb1 == sb2) {
return true;
}
int len = sb1.length();
if (len != sb2.length()) {
return false;
}
for (int i = 0; i < len; i++) {
if (sb1.charAt(i) != sb2.charAt(i)) {
return false;
}
}
return true;
}

关于java - 为什么字符串等于在我的代码中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35666077/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com