【问题标题】:How to check if a text contains an element of an ArrayList如何检查文本是否包含 ArrayList 的元素
【发布时间】:2020-03-25 10:32:01
【问题描述】:

我有一个文本和一个数组列表。我想检查我的文本是否包含 ArrayList 中的任何元素,如果他确实找到了,则将两个单词之间的空格替换为 "%"。 这是我的代码:

public static boolean stringContainsItemFromList(String text, ArrayList<String> list)
{
    for (String i: list)
    {
        if (text.contains(list[i]))
        {
            text.replaceAll(" ", "%");

            System.out.println("done");
            return true;
        }
    }
    return false;
}

它给了我这个错误:string cannot be converted to int 用于if (text.contains(list[i])) 行。知道我还能如何进行吗?

【问题讨论】:

    标签: arraylist


    【解决方案1】:

    i 是一个字符串。在那种情况下list[i] 没有意义,因为list[i] 内部的i 应该是一个索引,它是一个整数(例如list[0]list[1],但不能是list["hello"])。

    所以如果你想检查你的文本是否包含列表中的字符串,你可以使用

    if(text.contains(i))
    

    另外,请注意您的结果

    text.replaceAll(" ", "%");
    

    被忽略。如果要保留更改后的文本,可以通过将替换结果存储到新的单独变量中来实现。

    【讨论】:

      【解决方案2】:

      您的错误是因为 i 是一个字符串,而您将其用作 int

      public static boolean stringContainsItemFromList(String text, ArrayList<String> list)
      {
       for (String i: list) // HERE: i is an element of the list, not the index!
      
      {
          if(text.contains(list[i])) // HERE: list[string] -> error!
          {
          text.replaceAll(" ", "%");
      
          System.out.println("done");
      return true;
          }
      }
          return false;
      }
      

      text.contains(list[i]) 替换为text.contains(i) 并尝试使用更具描述性的变量名称:)

      【讨论】:

        【解决方案3】:

        有些东西让我相信,你真的需要这个!

        public static boolean stringContainsItemFromList(String text, ArrayList<String> list)
        {
            boolean flag = false;
            for (String i: list) {
                if(text.contains(i)) {
                    text = text.replaceAll(i, "%");
                    flag = true;
                }
            }
            System.out.println(text);
            System.out.println("done");
            return flag;
        }
        

        【讨论】:

          【解决方案4】:

          ArrayList&lt;String&gt; list 不是一个数组,它是一个列表。所以你可以通过调用get()方法来获取list的元素。

          例如

          list.get(0) // returns the first element of the list
          

          还有

          for (String i: list) {
              // ...
          }
          

          是一个foreach循环,不同版本的

          for(int x=0; x<list.size(); x++) {
              // ...
          }
          

          i对应list.get(x)

          您应该将text.contains(list[i]) 更改为text.contains(i),因为i 代表list.get(x)

          问:如何检查文本是否包含 ArrayList 的元素

          修复错误后,您会看到变量text 没有改变。因为在 Java 中字符串是不可变的,replaceAll() 方法返回一个新字符串。所以你应该将新值赋给text 变量:

          text = text.replaceAll("\\s", "%");
          

          这里是stringContainsItemFromList() 方法的更正版本:

          public static boolean stringContainsItemFromList(String text, List<String> list)
          {
               for (String i: list) {
                  if(text.contains(i)) {
                      text = text.replaceAll("\\s", "%");
                      System.out.println("done");
                      System.out.println(text);
          
                       return true;
                  }
              }
              return false;
          }
          

          【讨论】:

            猜你喜欢
            • 2020-04-16
            • 2014-01-22
            • 1970-01-01
            • 1970-01-01
            • 2016-03-31
            • 1970-01-01
            • 2012-05-03
            • 2017-05-08
            • 2021-07-16
            相关资源
            最近更新 更多