一个变量的多个字符串输入
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("+"))
【讨论】:
以上是关于一个变量的多个字符串输入的主要内容,如果未能解决你的问题,请参考以下文章