Java:检查String是否等于String

时间:2014-06-08 22:54:02

标签: java string object methods equals

我有一个问题,我试图将对象的名称(字符串)与另一个字符串进行比较,我尝试使用.equals()==但都没有似乎在我的情况下工作。

我现在的代码是:

public boolean checkingObjectName(String checkName)
{
    for (int i=0; i<count; i++) //where 'count' has a value of 3
    {
        if (product[i].getName().equals(checkName)) //where product[i] has been initialised
        {
            return true;
        }
        else
        {
            return false;
        }
    }
}

即使已设置为product[i]的名称与给定的参数相同,程序也始终返回false。我已经尝试查看与.equals()==以及其他字符串引用相关的其他问题,但我没有找到与我的问题相关的内容。

我看到有人使用compareTo(),但我不确定我的代码中是否有必要,而且我还不完全确定如何使用它。


编辑:正如Houssni在评论中所说,我刚刚意识到return语句结束了循环和方法。是否有可能在第一次检查后没有终止方法的情况下检查每个产品的名称,并让它返回一个布尔值?

编辑2:我已将代码修改为已提供答案的说明,即:

public boolean checkingObjectName(String checkName)
{
    for (int i=0; i<count; i++) //where 'count' has a value of 3
    {
        if (product[i].getName().equals(checkName)) //where product[i] has been initialised
        {
            return true;
        }
    }
    return false;
}

我仍然遇到同样的问题,product[i].getName()不等于checkName,方法返回false,即使它们应该相等。任何可能发生这种情况的可能性,因为我查看了我的代码并且我不确定。

编辑3:与上述代码块相关的唯一其他代码是来自另一个类的参数输入,即:

String checkName = JOptionPane.showInputDialog("Enter the name: ");
while (storingProducts.checkingObjectName(checkName) == false) //assume for storingProducts
{
    JOptionPane.showMessageDialog(null, "No products were found. Please re-input name.");
    checkName = JOptionPane.showInputDialog("Enter the name: ");
    storingProducts.checkingObjectName(checkName);
}
if (storingProducts.checkingObjectName(checkName) == true)
//extra code

那么,这是与我的问题有关的所有代码。我仍然不确定该方法返回false的原因,尽管两个值都接收相同的String值。

修改4 productcount来自使用checkingObjectName方法的课程:

public class Store
{
    private Product[] product; //Product is another class that just sets and gets
    private int count=3;

    public Store()
    {
        product = new Product[count];
        for (int i=0; i<count; i++)
        {
            product[i] = new Product();
        }
    //extra code

我修复了问题:我尝试使用.equals()而不是.equalsIgnoreCase(),而是有效。

4 个答案:

答案 0 :(得分:6)

该方法一旦到达count 0就会返回,但它找不到匹配项。如果要遍历数组直到找到匹配的名称,则代码应如下所示:

public boolean checkingObjectName(String checkName)
{
    for (int i=0; i<count; i++) //where 'count' has a value of 3
    {
        if (product[i].getName().equals(checkName)) //where product[i] has been initialised
        {
            return true;
        }
    }
    return false;
}

答案 1 :(得分:0)

由于您在每个可能的情况下都会找到return语句(if条件为truefalse),因此该方法始终< / em>在第一次迭代时退出。

你能做什么?如果你想要返回true如果数组中存在名称而{/ 1}},则可以这样做:

false

答案 2 :(得分:0)

如何将名称收集到List(或Set)并检查checkName是否匹配?

public boolean checkObjectName(final String checkName) {    
    List<String> productNames = new ArrayList<String>();
    for (Product prod : product) {
        productNames.add(prod.getName());
    }
    return productNames.contains(checkName);
}

请注意,这仅适用于比较 区分大小写的 字符串。可替代地,

public boolean checkObjectName(final String checkName) {    
    List<String> productNames = new ArrayList<String>();
    for (Product prod : product) {
        productNames.add(prod.getName().toLowerCase());
    }
    return productNames.contains(checkName.toLowerCase());
}

如果您不喜欢这种方法,可以使用已经提供的方法, equals替换为equalsIgnoreCase

答案 3 :(得分:0)

有两种比较字符串的方法:

  • 第一个是比较字符串的地址。例如:string blue = string red
  • 比较字符串的第二种方法是通过值。这可以通过使用string.equals("StringValue")
  • 来完成