【问题标题】:Check if a List/ArrayList contains chars of a string Java检查 List/ArrayList 是否包含字符串 Java 的字符
【发布时间】:2017-08-29 10:06:17
【问题描述】:

我想检查是否在给定的列表中找到了一个字符串,其中包含字母。 例如,如果我有:

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。

【问题讨论】:

  • 为什么你有List&lt;String&gt;而不是List&lt;Character&gt;?遍历str 字符串以获取其单独的字符然后使用list.contains(strChar); 会不会更容易?
  • 你是对的 :) 。使用字符来比较字符而不是字符串要容易得多。

标签: java string character


【解决方案1】:

您将String 与Character 进行比较,因此equals 返回false。

比较chars:

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 仅包含单个字符 Strings。顺便说一句,如果是这种情况,您可以将其替换为 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++;
        }
    }
}

【讨论】:

    【解决方案2】:

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

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

    或将字符串转换为字符并像这样进行比较:

    if (list.get(i).getCharAt(0)==str.charAt(j))
    

    【讨论】:

      【解决方案3】:

      您可以使用streams 在一行中使用内联 cmets 获得答案,如下所示:

      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);
      

      【讨论】:

        【解决方案4】:

        是的,这是正确的。谢谢你。而且我现在也刚刚检查过,发现我可以列出我的清单:

        ArrayList<Character> list ;
        

        而不是

        ArrayList<String> list ;
        

        【讨论】:

          【解决方案5】:

          将字符转换为字符串:

          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 的回答中所说的那样工作。

          【讨论】:

            猜你喜欢
            • 2013-03-14
            • 2021-05-18
            • 1970-01-01
            • 2016-03-25
            • 2016-01-17
            • 2014-12-27
            • 1970-01-01
            • 2019-03-03
            • 2011-11-09
            相关资源
            最近更新 更多