一个变量的几个字符串输入

时间:2013-01-24 12:57:28

标签: java string if-statement input

还有其他方法可以缩短这种情况吗?

if (oper.equals("add") || oper.equals("Add") || oper.equals("addition") ||
oper.equals("Addition") || oper.equals("+"))

我只是想知道我能做些什么来'快捷'这个。当提示在我的简单计算器程序中执行何种操作时,用户将键入一个字符串。我们的教授说我们的程序应该接受用户是否用小写字母输入“添加”或“添加”...或者是我应该做的唯一方法?

5 个答案:

答案 0 :(得分:9)

您可以将String#equalsIgnoreCase(String)用于前四个字符串: -

if (oper.equalsIgnoreCase("add") || 
    oper.equalsIgnoreCase("addition") || 
    oper.equals("+"))

如果字符串数量增加,最好使用List,并使用其contains方法。但仅针对这些输入,您只能遵循这种方法。


另一种方法是使用String#matches(String)方法,它采用正则表达式: -

if (oper.matches("add|addition|[+]")

但是,你真的不需要正则表达式。特别是,这种方法可能会变得更难以获得更多输入。但是,这只是这种情况的一种方式。所以,你可以选择其中之一。第一个是第一个更容易观看。


或者,您也可以使用enum来存储operators,并在任何地方传递它的实例,而不是string。使用它会更容易。枚举看起来像这样:

public enum Operator {
    ADD,
    SUB,
    MUL,
    DIV;
}

您可以根据自己的需要进行增强。请注意,由于您正在获取用户输入,因此您首先需要根据它来识别相应的枚举实例,并且从那里开始,您可以处理该枚举实例,而不是String。

答案 1 :(得分:4)

除了@ Rohit的回答,我想补充一下。

如果比较字符串,如果oper is null可以抛出NullPointerException。所以写它总是更好

"addition".equalsIgnoreCase(oper)

而不是

oper.equalsIgnoreCase("addition")

答案 2 :(得分:3)

如果aDD被视为无效输入,您可以考虑以下方法:

ArrayList<String> possibleInputs = new ArrayList<String>();

possibleInputs.add("Add");
possibleInputs.add("add");
possibleInputs.add("Addition");
possibleInputs.add("addition");
possibleInputs.add("+");

if(possibleInputs.contains(oper))
{
    // ...
}

答案 3 :(得分:0)

将一小部分代码放在一个名为isOperationAddition(String s){...}的函数中,该函数返回一个布尔值。

所以这个:

if (oper.equals("add") || oper.equals("Add") || oper.equals("addition") ||
    oper.equals("Addition") || oper.equals("+")){...}

对此的更改

if (isOperationAddition(operation)){...}

然后在该方法中,不要将字符串用作if语句的分支材料。有一个变量来定义它是什么类型的操作和“保持野蛮人(混乱/模糊的用户)在护城河”。您不应该总是迭代列表以记住我们正在处理的操作。

答案 4 :(得分:0)

你可以接受输入,转换成小写然后比较。

str.toLowerCase()

然后传递给你的if()语句

if(str.equals("add") || str.equals("addition") || str.equals("+"))