Java 奇怪的是,如果值似乎匹配,那么equals也总是返回false
我有这个方法 getParamJava 奇怪的是,如果值似乎匹配,那么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
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(…)