如果值看似匹配,则奇怪的等于总是返回false

时间:2012-06-23 15:51:27

标签: java

我有这个方法

getParam

public int getParam(String paramName){

    if(paramName.equals("Balls and net")){
        expressionParam=1;
    }
    else if(paramName.equals("Balls and bat")){
        expressionParam=2;
    }
    else if(paramName.equals("Without balls")){
        expressionParam=3;
    }
    else if(paramName.equals("Team Sport")){
        expressionParam=4;
    }
    else{
        expressionParam=-1;
    }

    return expressionParam;
}

但是由于一些奇怪的原因,if条件中的等于总是返回false并且方法总是返回-1

我在跟随按钮监听器中调用此方法

JButton btnNewButton = new JButton("    OK   ");
        btnNewButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                try {
                    Object[][] matrix=(((MyTableModel) table.getModel()).getDatamatrix());
                     List<Expression> list=new LinkedList<Expression>(); 
                     for (int i = 0; i <elem; i++){
                         Expression e=new Expression(getSport((matrix[i][0]).toString()), getParam((matrix[i][1]).toString()), getSport((matrix[i][2]).toString()));
                         list.add(v); 


             }catch...

并且使用println我已经验证传递给getParams的值匹配。

这个方法有什么问题??

3 个答案:

答案 0 :(得分:3)

很可能你有尾随或领先的空格。 trim()首先:

public int getParam(String rawParamName){
  final String paramName = rawParamName.trim();

  if(paramName.equalsIgnoreCase("Balls and net")){
  //...

还要注意角色情况。 Team sport实际上会返回-1。请考虑改为使用equalsIgnoreCase()

最后,您可能有不同数量或类型的空白区域,例如字符之间有两个空格或制表符。这需要更多的工作。

最后,如果您想要更灵活,请考虑使用levenshtein distance

答案 1 :(得分:2)

    比较前
  • .trim()
  • .equalsIgnoreCase(..)

=&GT;

if (paramName().trim().equalsIgnoreCase("..")) { .. }

答案 2 :(得分:0)

如上所述,但采用更正后的方法:

public int getParam(String paramName){
    String param = paramName.trim();
    if(param.equalsIgnoreCaseIgnoreCase("Balls and net")){
        return 1;
    }
    else if(param.equalsIgnoreCase("Balls and bat")){
        return 2;
    }
    else if(param.equalsIgnoreCase("Without balls")){
        return 3;
    }
    else if(param.equalsIgnoreCase("Team Sport")){
        return 4;
    }
    return -1;
}

记住equals区分大小写总是有帮助的。 equalsIgnoreCase是替代它的。 这是我在java初学者时犯的一个非常常见的错误。

您也可以使用contains(),但请记住要比较字符串与此方法的比较。