在toString方法之后使用equals方法的问题

问题描述

当我尝试将两个字符串作为函数的输入并检查它们是否为字谜时,我得到了错误输出。我已经编写了以下代码

    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" and t = "nagaram"。选中后,两个char数组都打印相同的值,即

sArray is: 
aaagmnr
tArray is: 
aaagmnr

但是我的输出似乎是错误的。有人可以帮我吗,为什么在equals()之后使用toString()会得到这样的结果?

解决方法

下面的代码行不会将char数组转换为String:

s = sArray.toString();
t = tArray.toString();

这只会将地址转换为String,为了将Array转换为String,您应该使用: 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);  
}
,

这里,toString()的char数组上的toString()方法是从对象类继承的:

public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

因此,请使用String.valueOf将字符数组再​​次转换为String

s = String.valueOf(sArray);
t = String.valueOf(tArray);

由于只需要比较,因此可以使用Arrays.equals()

直接比较字符数组。
return Arrays.equals(sArray,tArray);
,

您对App\Product的转换是错误的,因为数组不会覆盖return Scaffold( body: SafeArea( child: Column( children: [ Container(),... ... ] ) ) ); 的{​​{1}}实现。

也就是说,没有理由将数组转换为String以便进行比较。您可以使用Object直接比较它们,这将返回真实的toString()

String
,

您正在比较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];

然后像这样进行比较:

return str.equals(str2);
,

您可以使用public String(char[] value)String中创建一个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

或者,您可以使用String#valueOfString中创建一个char[]。还有更多解决方案(例如,直接使用Arrays#equals比较char数组,将一个数组中的每个元素与另一个数组中的每个元素进行比较等),我建议您为学习目的尽可能尝试。>

您的方法出了什么问题?

sArray.toString()tArray.toString()返回不同的字符串,您可以通过打印它们或调试代码来找到它们。这种差异背后的原因是sArraytArray的哈希码不同。检查What is a debugger and how can it help me diagnose problems?,了解如何使用调试器来避免这种情况。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...