我想检查在给定列表中是否找到字符串。 例如,如果我有:
ArrayList<String> list = new ArrayList();
list.add("a");
list.add("e");
list.add("i");
list.add("o");
list.add("u");
String str = "aeo";
for (int i = 0; i < list.size(); i++)
for (int j = 0; j < str.length(); j++) {
if (list.get(i).equals(str.charAt(j)))
count++;
}
System.out.println(count);
str在我的信件列表中找到,所以我必须看到我的计数值为3,因为我在列表中找到了3个匹配字符串。 无论如何,count打印值为0。 主要思想是我必须检查列表中是否找到str,无论str中字母的顺序如何。
答案 0 :(得分:5)
您正在将String
与Character
进行比较,因此equals
会返回false
。
比较char
:
for (int i = 0; i < list.size(); i++) {
for (int j=0; j < str.length(); j++) {
if (list.get(i).charAt(0) == str.charAt(j)) {
count++;
}
}
}
这假设您的list
仅包含单个字符String
。顺便说一句,如果是这种情况,你可以用char[]
替换它:
char[] list = {'a','e','i','o','u'};
for (int i = 0; i < list.length; i++) {
for (int j = 0; j < str.length(); j++) {
if (list[i] == str.charAt(j)) {
count++;
}
}
}
答案 1 :(得分:1)
字符串不等于某个字符,因此您必须将该字符转换为字符串。
if (list.get(i).equals(String.valueOf(str.charAt(j))))
或字符串到char并比较它:
if (list.get(i).getCharAt(0)==str.charAt(j))
答案 2 :(得分:1)
您可以使用streams
在一行中获得答案,如下所示,并带有内嵌注释:
ArrayList<String> list = new ArrayList();
//add elements to list
String str = "aeo";//input string
//split str input string with delimiter "" & convert to stream
long count = Arrays.stream(str.split("")).//splt the string to array
filter(s -> list.contains(s)).//filter out which one matches from list
count();//count how many matches found
System.out.println(count);
答案 3 :(得分:1)
将字符转换为字符串:
list.get(i).equals(String.valueOf(str.charAt(j)))
将字符转换为字符串的正确语法是:
list.get(i).charAt(0) == str.charAt(j)
list.get(i).getCharAt(0)==str.charAt(j)
不会像Jens&#39;中所写的那样工作。答案。
答案 4 :(得分:0)
是的,这是对的。谢谢你。我现在也检查过,看到我可以列出我的名单:
ArrayList<Character> list ;
而不是
ArrayList<String> list ;