1

私はこの方法を持っています

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を返します。

フォローボタンリスナーでこのメソッドを呼び出します

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()代わりに使用することを検討してください。

最後に、空白の数や種類が異なる場合があります。たとえば、文字の間に2つのスペースやタブがあります。これにはもう少し作業が必要です。

最後に、柔軟性を高めたい場合は、レーベンシュタイン距離の使用を検討してください。

于 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 に答える