Java 在toString()方法之后使用equals()方法时出现问题
当我尝试将两个字符串作为函数的输入并检查它们是否是字谜时,我得到了错误的输出。我已经编写了以下代码Java 在toString()方法之后使用equals()方法时出现问题,java,string,equals,Java,String,Equals,当我尝试将两个字符串作为函数的输入并检查它们是否是字谜时,我得到了错误的输出。我已经编写了以下代码 class Solution { public boolean isAnagram(String s, String t) { char sArray[] = s.toCharArray(); char tArray[] = t.toCharArray(); Arrays.sort(sArray); Arrays.so
class Solution {
public boolean isAnagram(String s, String t) {
char sArray[] = s.toCharArray();
char tArray[] = t.toCharArray();
Arrays.sort(sArray);
Arrays.sort(tArray);
s = sArray.toString();
t = tArray.toString();
return s.equals(t);
}
}
我的示例输入是s=“anagram”和t=“nagaram”
。选中时,两个字符数组打印相同的值,即
sArray is:
aaagmnr
tArray is:
aaagmnr
但我的输出似乎是错误的。有人能告诉我为什么在
toString()
之后使用equals()
时会得到这样的结果吗?由于数组不重写toString()
的对象
实现,您对字符串的转换是不正确的
也就是说,没有理由将数组转换为String
,以便对它们进行比较。您可以直接使用数组进行比较。equals
如果两个数组包含相同数量的元素,并且两个数组中所有对应的元素对都相等,则返回true
char sArray[] = s.toCharArray();
char tArray[] = t.toCharArray();
Arrays.sort(sArray);
Arrays.sort(tArray);
return Arrays.equals(sArray,tArray);
您对字符串的转换不正确,因为数组不重写对象实现toString()
也就是说,没有理由将数组转换为String
,以便对它们进行比较。您可以直接使用数组进行比较。equals
如果两个数组包含相同数量的元素,并且两个数组中所有对应的元素对都相等,则返回true
char sArray[] = s.toCharArray();
char tArray[] = t.toCharArray();
Arrays.sort(sArray);
Arrays.sort(tArray);
return Arrays.equals(sArray,tArray);
下面的代码行不会将字符数组转换为字符串:
s = sArray.toString();
t = tArray.toString();
这仅将地址转换为字符串,为了将数组转换为字符串,您应该使用:Arrays.toString(arrName)
现在代码将如下所示:
public static boolean isAnagram(String s, String t) {
char sArray[] = s.toCharArray();
char tArray[] = t.toCharArray();
Arrays.sort(sArray);
Arrays.sort(tArray);
s = Arrays.toString(sArray);
t = Arrays.toString(tArray);
return s.equals(t);
}
return str.equals(str2);
下面的代码行不会将字符数组转换为字符串:
s = sArray.toString();
t = tArray.toString();
这仅将地址转换为字符串,为了将数组转换为字符串,您应该使用:Arrays.toString(arrName)
现在代码将如下所示:
public static boolean isAnagram(String s, String t) {
char sArray[] = s.toCharArray();
char tArray[] = t.toCharArray();
Arrays.sort(sArray);
Arrays.sort(tArray);
s = Arrays.toString(sArray);
t = Arrays.toString(tArray);
return s.equals(t);
}
return str.equals(str2);
这里,toString()
在从对象类继承的名为toString()
方法的字符数组上:
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
因此,使用String.valueOf
再次将字符数组转换为字符串
s = String.valueOf(sArray);
t = String.valueOf(tArray);
由于只需比较,因此可以使用Arrays.equals()
这里,toString()
在从对象类继承的名为toString()
方法的字符数组上:
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
因此,使用String.valueOf
再次将字符数组转换为字符串
s = String.valueOf(sArray);
t = String.valueOf(tArray);
由于只需比较,因此可以使用Arrays.equals()
您正在比较中sArray和tArray的内存地址
s = sArray.toString();
t = tArray.toString();
我建议您循环数组中的值并将其存储在字符串中
for( int i = 0; i < sArray.length; i++ )
str += sArray[i];
for( int i = 0; i < tArray.length; i++ )
str2 += tArray[i];
您正在比较中sArray和tArray的内存地址
s = sArray.toString();
t = tArray.toString();
我建议您循环数组中的值并将其存储在字符串中
for( int i = 0; i < sArray.length; i++ )
str += sArray[i];
for( int i = 0; i < tArray.length; i++ )
str2 += tArray[i];
您可以使用public String(char[]value)
从char[]
中创建字符串
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
System.out.println(isAnagram("anagram", "nagaram"));
}
public static boolean isAnagram(String s, String t) {
char sArray[] = s.toCharArray();
char tArray[] = t.toCharArray();
Arrays.sort(sArray);
Arrays.sort(tArray);
s = new String(sArray);// Create String out of sArray
t = new String(tArray);// Create String out of tArray
return s.equals(t);
}
}
输出:
true
或者,您可以使用从char[]
创建字符串。还有更多的解决方案(例如,直接使用比较字符数组,将一个数组的每个元素与另一个数组的每个元素进行比较等),我建议您尽可能多地尝试,以便学习
你的方法出了什么问题?
sArray.toString()
和tArray.toString()
返回可以通过打印或调试代码找到的不同字符串。这种差异背后的原因是sArray
和tArray
的散列码不同。检查以了解如何使用调试器来避免此类情况。您可以使用公共字符串(char[]值)
从字符[]
中创建字符串
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
System.out.println(isAnagram("anagram", "nagaram"));
}
public static boolean isAnagram(String s, String t) {
char sArray[] = s.toCharArray();
char tArray[] = t.toCharArray();
Arrays.sort(sArray);
Arrays.sort(tArray);
s = new String(sArray);// Create String out of sArray
t = new String(tArray);// Create String out of tArray
return s.equals(t);
}
}
输出:
true
或者,您可以使用从char[]
创建字符串。还有更多的解决方案(例如,直接使用比较字符数组,将一个数组的每个元素与另一个数组的每个元素进行比较等),我建议您尽可能多地尝试,以便学习
你的方法出了什么问题?
sArray.toString()
和tArray.toString()
返回可以通过打印或调试代码找到的不同字符串。这种差异背后的原因是sArray
和tArray
的散列码不同。检查以了解如何使用调试器来避免这种情况。Arrays.toString将返回[a,a,a,g,m,n,r]而不是aaagmnr。实际上,它将返回[a,a,a,g,m,n,r],但在比较字谜时,它不会影响逻辑。为了将数组转换为字符串,这实际上表示其他内容,这并不意味着字符数组的字符串表示形式为[并以,(逗号)分隔。不过,您只需使用新字符串(数组)
,即可获得简单的表示形式,无需额外的逗号或括号。此外,继承的toString()
数组的方法生成一个类名,后跟@和对象哈希代码。这与地址无关。数组。toString将返回[a,a,a,g,m,n,r]而不是aaagmnr实际是,它将返回[a,a,a,g,m,n,r]但是,在比较字谜的情况下,它不会影响逻辑。为了将数组转换为字符串,这实际上表示其他内容,并不意味着字符数组的字符串表示形式为[并用逗号分隔],但是,您可以简单地使用新字符串(数组)
,以获得简单的表示形式,无需额外的逗号或括号。此外,继承的数组的toString()
方法生成一个类名,后跟@和对象哈希代码。这与