检查一个List/ArrayList是否包含一个字符串的字符Java
问题描述:
我想检查一个字符串是否在给定的字母表中找到。 举例来说,如果我有:检查一个List/ArrayList是否包含一个字符串的字符Java
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场比赛,在我的列表中的字符串。 无论如何,计数值打印为0。 主要想法是,我不得不检查str中是否存在str,无论str中的字母顺序如何。
答
您在比较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++;
}
}
}
答
的字符串不等于一个字符,所以你必须将字符转换为字符串。
if (list.get(i).equals(String.valueOf(str.charAt(j))))
或字符串为char和这样的比较吧:
if (list.get(i).getCharAt(0)==str.charAt(j))
答
您可以使用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);
答
是的,这是对的。感谢它。而且我刚才也检查,看到我可以让我的列表:
ArrayList<Character> list ;
,而不是
ArrayList<String> list ;
答
字符转换为字符串:
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的答案中所写的那样工作。
为什么你有'列表'而不是'列表'?迭代'str'字符串以获取其各个字符,然后使用'list.contains(strChar);'是否更容易? –
Tom
你是对的:)。使用字符来比较字符而不是字符串要容易得多。 – lexraid