【问题标题】:Java check all characters in string are present in a given string arrayJava检查字符串中的所有字符是否存在于给定的字符串数组中
【发布时间】:2013-12-16 20:06:53
【问题描述】:

我正在尝试创建一个方法来检查 userInput 中的每个字符以查看它们是否存在于 operatorAndOperands 中。问题是 tempbool 对于所有值始终为 false。

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;
}
}

【问题讨论】:

  • currentChar 的数据类型是char,你的操作数的数据类型是Stringstempbool 永远是假的。
  • operatorsAndOperands 是一个字符串数组,你正在与循环中的一个字符进行比较
  • 另请注意,您可以在 if 语句中 break; 您的循环(无需检查其他字符是否有效,因为您找到了一个无效字符)。

标签: java arrays string character


【解决方案1】:

这是因为您有一个字符串对象数组(稍后将其转换为字符串对象列表),但您正在检查 char 是否存在于该数组中。

这里的效率也很差 - 在每次迭代中将固定数组转换为列表会占用大量不必要的 CPU 周期。

解决这个问题的一个简单方法是将所有字符放在一个字符串中,然后根据该字符串检查每个传入的字符:

if ("0123456789+-*/".indexOf(currentChar) >= 0) {
    ... // Good character
}

另一种解决方案是制作一个只允许指定您的字符的正则表达式,如下所示:

if (expr.replaceAll("[0-9+/*-]*", "").length() == 0) {
    ... // Expr contains only valid characters
}

【讨论】:

    【解决方案2】:

    你为什么不声明

    String[] operatorsAndOperands = {"1","2","3","4","5","6","7","8","9","0","+","-","*","/"};
    

    作为字符串,而不是字符串数组。然后你可以使用 contains 方法来检查字符与有效的操作符。

    【讨论】:

      【解决方案3】:

      声明:char[] operatorsAndOperands; 而不是:String[] operatorsAndOperands

      或者添加这个:String.valueOf(charToCompare) 作为“包含”参数。

      【讨论】:

        【解决方案4】:

        正如已经指出的那样,问题在于您正在检查 char 对象列表中的 String 对象,因此您永远找不到它。

        不过,您可以通过使用正则表达式来简化此检查:

        Pattern operatorsAndOperands = Pattern.compile("[0-9+\\-*/]");
        

        【讨论】:

          猜你喜欢
          • 2021-11-16
          • 1970-01-01
          • 1970-01-01
          • 2023-03-31
          • 2020-07-06
          • 1970-01-01
          • 2014-07-29
          • 2022-01-10
          • 2020-11-28
          相关资源
          最近更新 更多