Java检查字符串中的所有字符都存在于给定的字符串数组中

时间:2013-12-16 20:06:53

标签: java arrays string character

我正在尝试创建一个检查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;
}
}

4 个答案:

答案 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+\\-*/]");