如何以有组织的方式将一系列值与字符串进行比较?

时间:2014-02-25 03:40:42

标签: java

这是一个简单的问题。

我有一个字符串,我已将其拆分为一个字符数组。我需要遍历每个字符并检查它是否与指示某些行为的相关字符相同。如果没有一堆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,因为它是一个字符数组。

3 个答案:

答案 0 :(得分:1)

编辑:我在创建时发生了从C#到java的更改。因此,这可能无效。

简单的问题,半复杂的答案。

您可以创建一个Dictionary <char, object>,其中对象是一些适合您的其他Type。之后,在迭代字符串时,检查Dictionary是否包含密钥,然后......好吧,您可以从那里对其进行排序。 :)

建议您可以使用delegate或其中一种子类型(ActionPredicateFunc)。由于你没有发布任何代码,我不能再具体了......

答案 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);`