我有这个方法
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的值匹配。
这个方法有什么问题??
答案 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(),但请记住要比较字符串与此方法的比较。