1

我有这个方法

获取参数

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条件中的equals总是返回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 的值是否匹配。

那么这个方法有什么问题呢??

4

3 回答 3

3

您很可能有尾随或前导空格。trim()第一的:

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

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

还要注意字符大小写。Team sport实际上会返回-1。考虑equalsIgnoreCase()改用。

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

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

于 2012-06-23T15:55:01.767 回答
2
  • .trim()比较前
  • .equalsIgnoreCase(..)

=>

if (paramName().trim().equalsIgnoreCase("..")) { .. }
于 2012-06-23T15:55:37.990 回答
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(),但请记住要小心将字符串与此方法进行比较。

于 2012-06-23T16:04:47.473 回答