我有一个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;
}
还是有更好的方法吗?
答案 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的解决方案相反。我可能会采用他的方法,因为它更容易阅读,但我认为我的答案是一个很好的尝试,以不同的味道解决问题。