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

Posted

技术标签:

【中文标题】一个变量的多个字符串输入【英文标题】:Several string inputs for one variable 【发布时间】:2013-01-08 05:50:00 【问题描述】:

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

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

我只是想知道是否有什么我可以做的“捷径”。当提示在我的简单计算器程序中执行什么样的操作时,用户将键入一个字符串。我们的教授说我们的程序应该接受用户输入“add”还是“Add”,你知道,小写字母与否……或者我应该这样做的唯一方法?

【问题讨论】:

也许将替代词放在列表/数组中并执行包含()/循环。要允许大写字母,只需在解析之前将所有输入转换为小写(或大写),或使用 equalsIgnoreCase,如下所示。 equalsIgnoreCase() 而不是 equals() ? 【参考方案1】:

您可以将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;

您可以根据自己的需要对其进行增强。请注意,由于您正在获取用户输入,因此您首先需要根据它识别适当的枚举实例,然后您可以处理该枚举实例,而不是字符串。

【讨论】:

+1 我喜欢another 方法。没那么难理解(1st one is more clear to watch on first go.) @NandkumarTekale .. 对。但是,以防万一有人对Regex 不满意。【参考方案2】:

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

在比较字符串的情况下,如果oper is null 可以抛出NullPointerException。所以写起来总是更好

"addition".equalsIgnoreCase(oper)

而不是

oper.equalsIgnoreCase("addition")

【讨论】:

【参考方案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))

    // ...

【讨论】:

那么使用equalsIgnoreCase()不是更好吗? possibleInputs.**Add**()??? List中没有这种方法。天哪,上面有2 upvotes 您可以使用String#toLowerCase() 方法,以避免在您的列表中同时添加"add""Add"。您可以假设aDD 不是无效的,因为它没有在 OP 中列出。 @Azodious.. C# 可能更早??我只是猜测。无论如何,发生了:) 是的,遵循 C# 命名约定。【参考方案4】:

将整段代码放入一个名为:isOperationAddition(String s)... 的函数中,该函数返回一个布尔值。

所以这个:

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

对此的更改

if (isOperationAddition(operation))...

然后在该方法中,不要使用字符串作为 if 语句的分支材料。有一个变量来定义它是哪种操作,并且“让野蛮人(困惑/模棱两可的用户)远离护城河”。您不应该总是对列表进行迭代以记住我们正在处理的操作。

【讨论】:

【参考方案5】:

您可以获取输入,并将其转换为小写,然后进行比较。

str.toLowerCase()

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

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

【讨论】:

以上是关于一个变量的多个字符串输入的主要内容,如果未能解决你的问题,请参考以下文章

如何在文本框中输入多个字符串变量

编写程序,输入字符串(包含空格),统计其中单词的个数,单词之间以一个或多个空格分隔。

c语言中的变量的作用,如何从键盘中输入多个变量的值?

将字符串解析为多个变量

c语言中多个scanf怎么输入

在 CUDA 中同步多个变量