Java 奇怪的是,如果值似乎匹配,那么equals也总是返回false

Java 奇怪的是,如果值似乎匹配,那么equals也总是返回false,java,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

我有这个方法

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条件中的equals总是返回false,而该方法最终总是返回-1

我在follow按钮侦听器中调用此方法

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...
JButton btnNewButton=新的JButton(“确定”);
addActionListener(新ActionListener(){
已执行的公共无效操作(操作事件e){
试一试{
对象[][]矩阵=((MyTableModel)table.getModel()).getDatamatrix());
列表=新建LinkedList();

对于(int i=0;i最有可能有尾随空格或前导空格。
trim()
首先:

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

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

也注意字符的情况。<代码>团队运动实际上会返回<代码> -1 。考虑使用<代码>均衡器()/<代码>。

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


最后,如果你想灵活地考虑使用.

你很可能有尾随或领先的空白。<代码> Times()/代码>第一:

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

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

也注意字符的情况。<代码>团队运动实际上会返回<代码> -1 。考虑使用<代码>均衡器()/<代码>。

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

最后,如果你想灵活地考虑使用.< /P> < UL>

  • 比较前使用
    .trim()
  • .equalsIgnoreCase(..)
  • =>

    • 比较前使用
      .trim()
    • .equalsIgnoreCase(..)
    =>


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

    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(),但请记住使用此方法比较字符串时要小心。

    如上所述,但使用正确的方法:

    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()但是请记住要小心用这个方法比较你的字符串。

    <代码>等于是区分大小写的。你可能想考虑使用<代码>均衡器>代码>如果这是问题。只需一个小注意:你不必使用中间变量<代码> ExpRealPARAM < /代码>。代替每次分配变量。<代码>等于是区分大小写的。如果可能的话,您可能需要考虑使用<代码>均衡器>代码>。只是一个小注意:您不必使用中间变量<代码> ExpRealPARAM < /代码>。应该真正重新设计他的解决方案,使程序逻辑不依赖于人类可读的字符串。OP应该真正重新设计他的解决方案,使程序逻辑不依赖于人类可读的字符串。您能给我更多详细信息吗…我应该在哪里使用
    trim()
    ?(但是大小写相同)
    paramName.trim().equalsIgnoreCase(…)
    您能告诉我更多详细信息吗…我应该在哪里使用
    trim()
    ?(但情况相同)
    paramName.trim().equalsIgnoreCase(…)