检查String是否包含String []中存在的任何值,而不使用正则表达式 - Java

时间:2015-06-29 06:43:45

标签: java android string

我有一个String [],其中包含我需要在输入EditText的文本中找到的值。我知道如何使用正则表达式来做,但有没有办法,我可以做到没有正则表达式。

public static String[] knownCombinations = new String[] { "IV", "IX", "XL",
            "CD", "CM" };

现在,如果我输入MMMDCCIV,如何检查字符串是否包含String []中的任何值?或者正在迭代String []并检查输入的字符串中的每个值,这是否足够好?

例如:

String input = "MMMDCCIV";

for(int i = 0; i < knownCombinations.length; i++) {
  if(input.contains(knownCombinations[i])
    return true;
  else 
    return false;
}

还是有更好的方法吗?

2 个答案:

答案 0 :(得分:2)

迭代数组是唯一的方法(尽管可能使用Java 8 Streams编写的代码较少),但是循环中存在错误。 你应该只在循环结束后返回false而没有找到任何匹配。

for(int i = 0; i < knownCombinations.length; i++) {
  if(input.contains(knownCombinations[i])
    return true;
}
return false;

假设您需要在输入String中包含至少一个数组的元素(而不是所有元素)。

答案 1 :(得分:2)

在将input添加到knownCombinations之后,可以 遍历Set字符串,而不是迭代数组:

Set<String> knownSet = new HashSet<String>(Arrays.asList(knownCombinations)); 
String input = "MMMDCCIV";

for (int i=0; i < input.length-1; ++i) {              // iterate over each 2-letter 
    if (knownSet.contains(input.substring(i, i+2)) {  // combination in the input
        return true;
    }
}
return false;

这基本上与@Eran的解决方案相反。我可能会采用他的方法,因为它更容易阅读,但我认为我的答案是一个很好的尝试,以不同的味道解决问题。