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

时间:2020-03-25 10:32:01

标签: arraylist

我有一个文本和一个数组列表。我想检查我的文本是否在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 intif (text.contains(list[i]))。你知道我还能怎么做吗?

5 个答案:

答案 0 :(得分:1)

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

因此,如果您要检查文本是否包含列表中的字符串,则可以使用

if(text.contains(i))

另外,请注意,您的

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

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

答案 1 :(得分:0)

ArrayList<String> list不是数组,而是一个列表。因此,您可以通过调用get()方法来获取列表的元素。

例如

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

答案 2 :(得分:0)

您的错误是因为i是一个字符串,并且您将其用作整数

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),并尝试使用更具描述性的var名称:)

答案 3 :(得分:0)

让我相信的是,您实际上需要这个!

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 :(得分:0)

请考虑以下代码行:

for (String i : list) {
    if (text.contains(list[i])) {

在这里,您要迭代list,并在每次迭代中将list的当前字符串存储到i中。由于i已经包含您要在text中签入的字符串,因此您要做的就是

if (text.contains(i))

您面临的问题有两个原因:

A。您正在尝试使用数组语法从list访问字符串,而list不是数组。如果您打算使用其索引从list访问字符串,则可以

for(int i = 0; i<list.size(); i++) {
    if (text.contains(list.get(i))) {
        //...
    }
}

B。假设list是一个数组,您的语法仍然会出错,因为数组的索引值必须为int,而i不是int;这是一个字符串。

如果您没有适当地命名变量,则这类问题很常见,例如如果您使用了str或下面给出的其他一些合适的名称,您将不会遇到这种问题:

for (String str : list) {
    if (text.contains(str)) {