这是一个简单的问题。
我有一个字符串,我已将其拆分为一个字符数组。我需要遍历每个字符并检查它是否与指示某些行为的相关字符相同。如果没有一堆if / switch语句,我怎么能这样做呢。除了创建一个我实现的新方法,它接受多个参数并比较所有参数,不知道我能在这里做什么。
感谢。
编辑:我正在寻找能够做到这一点的函数的良好实现,或者是一个使这个过程更容易的java语句(即if语句)。
edit2:被误认为是c#,但我经常使用这两种语言,所以我不介意任何一种解释。
一些蹩脚的代码来说明我的意思的一个简单例子:
`if (charsArray[i] == "-")
s.push(charsArray[i]);
if (charsArray[i] == "+")
s.push(charsArray[i]);
if (charsArray[i] == "[")
s.push(charsArray[i]);
if (charsArray[i] == "]")
s.push(charsArray[i]);`
注意:我会使用for循环来遍历每个char,因为它是一个字符数组。
答案 0 :(得分:1)
简单的问题,半复杂的答案。
您可以创建一个Dictionary <char, object>
,其中对象是一些适合您的其他Type
。之后,在迭代字符串时,检查Dictionary
是否包含密钥,然后......好吧,您可以从那里对其进行排序。 :)
建议您可以使用delegate
或其中一种子类型(Action
,Predicate
或Func
)。由于你没有发布任何代码,我不能再具体了......
答案 1 :(得分:1)
如果每个符号的行为不是唯一的,那么两个非常好的解决方案就是一个开关:
switch(charsArray[i]) {
case '+': case '-': case '[': case ']':
s.push(charsArray[i]);
}
和字符串包含(这可能是评论建议所指的):
if("+-[]".contains(String.valueOf(charsArray[i]))) {
s.push(charsArray[i]);
}
如果行为是唯一的,您可以将strategy pattern与HashMap一起使用:
// where charMap is some HashMap<Character, SomeStrategy>
SomeStrategy strat = charMap.get(charArray[i]);
if(strat != null)
strat.execute();
(我认为这是做@bubbinator建议的Java方法。我不知道C#,但我猜Dictionary是一个哈希表。)
答案 2 :(得分:0)
从字符串中删除所有“不感兴趣”的字符(将其替换为空格),然后按所有剩余的字符。
这只是两行:
for (char c : str.replaceAll("[^-+\\[\\]]", "").toCharArray())
s.push(c);`