Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检查字符串是否包含字符串[]中存在的任何值,而不使用regex-Java_Java_Android_String - Fatal编程技术网

检查字符串是否包含字符串[]中存在的任何值,而不使用regex-Java

检查字符串是否包含字符串[]中存在的任何值,而不使用regex-Java,java,android,string,Java,Android,String,我有一个字符串[],它的值需要在输入到EditText中的文本中查找。我知道如何使用正则表达式,但有没有一种方法可以不用正则表达式 public static String[] knownCombinations = new String[] { "IV", "IX", "XL", "CD", "CM" }; 现在,如果我输入,MMMDCCIV,如何检查字符串是否具有字符串[]中的任何值?或者遍历字符串[]并检查输入的字符串中的每个值,这种方法足够好吗 例如: Stri

我有一个字符串[],它的值需要在输入到EditText中的文本中查找。我知道如何使用正则表达式,但有没有一种方法可以不用正则表达式

public static String[] knownCombinations = new String[] { "IV", "IX", "XL",
            "CD", "CM" };
现在,如果我输入,
MMMDCCIV
,如何检查字符串是否具有字符串[]中的任何值?或者遍历字符串[]并检查输入的字符串中的每个值,这种方法足够好吗

例如:

String input = "MMMDCCIV";

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

或者有更好的方法吗?

迭代数组是唯一的方法(尽管使用Java 8流编写的代码可能更少),但是循环中有一个错误。 只有在循环结束且未找到任何匹配项后才应返回false

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

假设输入字符串中至少要包含一个数组元素(而不是全部元素)。

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

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

这是假设您需要至少一个数组元素包含在输入字符串中(而不是全部)。

在将
知识组合添加到
集合后,您可以迭代
输入字符串,而不是迭代数组:

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;
Set knownSet=newhashset(Arrays.asList(knownCombinations));
字符串输入=“MMMDCCIV”;
对于(int i=0;i

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

在添加
knownC之后,你可以迭代
输入
字符串,而不是迭代数组将
组合到
集合

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;
Set knownSet=newhashset(Arrays.asList(knownCombinations));
字符串输入=“MMMDCCIV”;
对于(int i=0;i

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

Regex在这里不是一个好的解决方案。你不想使用它是很好的:)问题到底是什么?“足够好了”是一个相对的术语…我的意思是,它可以用Java中的任何内置方法来完成。另一个答案就在你面前…等等…@TimBiegeleisen,正如你的指挥官:)正则表达式在这里不是一个好的解决方案。你不想使用它是好的:)到底是什么问题?“足够好了”是一个相对的术语…我的意思是,它可以用Java中的任何内置方法来实现。另一个答案是…等等…@TimBiegeleisen,就像你的指挥官:)因为,埃兰是第一个回答的,我接受了他的答案。我对你的答案投了赞成票。谢谢你的时间。感谢你。不用担心…很高兴回答你的问题。^^因为,埃兰是第一个回答的,我接受了他的答案。我对你的答案投了赞成票。谢谢你的时间。谢谢。不用担心…很高兴回答你的问题。^^