2017-04-04 265 views
3

我想检查一个字符串是否在给定的字母表中找到。 举例来说,如果我有:检查一个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中的字母顺序如何。

+1

为什么你有'列表'而不是'列表'?迭代'str'字符串以获取其各个字符,然后使用'list.contains(strChar);'是否更容易? – Tom

+1

你是对的:)。使用字符来比较字符而不是字符串要容易得多。 – lexraid

回答

5

您在比较StringCharacter,因此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

的字符串不等于一个字符,所以你必须将字符转换为字符串。

if (list.get(i).equals(String.valueOf(str.charAt(j)))) 

或字符串为char和这样的比较吧:

if (list.get(i).getCharAt(0)==str.charAt(j)) 
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); 
0

是的,这是对的。感谢它。而且我刚才也检查,看到我可以让我的列表:

ArrayList<Character> list ; 

,而不是

ArrayList<String> list ; 
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的答案中所写的那样工作。

相关问题