我正在尝试创建一个检查userInput中每个字符的方法,以查看它们是否存在于operatorAndOperands中。问题是对于所有值,tempbool总是假的。
import java.util.*;
public class stringCalculator
{
private String userInput = null;
String[] operatorsAndOperands = {"1","2","3","4","5","6","7","8","9","0","+","-","*","/"};
public stringCalculator(String newInput)
{
userInput = newInput;
}
public boolean checkInput()
{
boolean ifExists = true;
for(int i=0; i<userInput.length(); i++)
{
char currentChar = userInput.charAt(i);
boolean tempbool = Arrays.asList(operatorsAndOperands).contains(currentChar);
if (tempbool == false)
{
ifExists = false;
}
}
return ifExists;
}
}
答案 0 :(得分:2)
这是因为你有一个字符串对象数组(稍后将其转换为字符串对象列表),但是你正在检查char
是否存在该数组。
效率在这里也很差 - 在每次迭代时将固定数组转换为列表会占用大量不必要的CPU周期。
解决此问题的一个简单方法是将所有字符放在一个字符串中,然后根据该字符串检查每个传入的字符:
if ("0123456789+-*/".indexOf(currentChar) >= 0) {
... // Good character
}
另一个解决方案是制作一个只允许指定字符的正则表达式,如下所示:
if (expr.replaceAll("[0-9+/*-]*", "").length() == 0) {
... // Expr contains only valid characters
}
答案 1 :(得分:1)
你为什么不宣布
String[] operatorsAndOperands = {"1","2","3","4","5","6","7","8","9","0","+","-","*","/"};
作为String,而不是String数组。然后你可以使用contains方法来检查有效运算符的字符。
答案 2 :(得分:0)
声明:char[] operatorsAndOperands;
而不是:String[] operatorsAndOperands
。
或者添加:String.valueOf(charToCompare)作为&#34;包含&#34;参数。
答案 3 :(得分:0)
正如已经指出的那样,问题是您在char
个对象列表中检查String
,因此您永远找不到它。
但是,通过使用正则表达式,您可以更轻松地进行此检查:
Pattern operatorsAndOperands = Pattern.compile("[0-9+\\-*/]");