当前位置: 首页 > 知识库问答 >
问题:

如何检查ArrayList中是否包含字符串?包含不起作用[重复]

禹德水
2023-03-14

我的代码几乎准备好了,我只是不能解决一个简单的问题。我想在ArrayList中添加识别码和附加到它的项。例如,括号只是为了明确我想做什么,它们不是代码或输出的一部分:

  • 3ZU2SD34:长者卷轴(-!已添加)
  • 9ZU5SD54:Fifa 21(-!新增)
  • 3ZU2SD34:长者卷轴(-!未添加,ID已在列表中)
  • 3ZU2SD34:最终幻想(-!未添加,ID已在列表中)
  • 4ZU8SD89:NBA 2K22(-!新增)

...等等。

我的代码如下:

import java.util.ArrayList;
    import java.util.Scanner;

    public class Main {

        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            ArrayList<Item> items = new ArrayList<>();

            while (true) {

                System.out.println("Identifier? (empty will stop)");
                String identifier = scanner.nextLine();

                if (identifier.isEmpty()) {
                    break;
                }

                System.out.println("Name? (empty will stop)");
                String name = scanner.nextLine();

                if (name.isEmpty()) {
                break;
                }
                /*if (!items.contains(identifier)){   This doesn't work
                    items.add(new Item(identifier, name));
                }*/
                
                if (!items.contains(new Item(identifier,name))) {
                items.add(new Item(identifier, name));  //this works fine, but I want to skip even if only the ID is equal
                }
            }

            System.out.println("");
            System.out.println("==Items==");
            for (Item lines : items) {
               System.out.println(lines);
            }
        }
    }

输出:

Identifier? (empty will stop)
1234
Name? (empty will stop)
Test1
Identifier? (empty will stop)
1234
Name? (empty will stop)
Test2
Identifier? (empty will stop)
1234
Name? (empty will stop)
Test1
Identifier? (empty will stop)
5555
Name? (empty will stop)
Test3
Identifier? (empty will stop)


==Items==
1234: Test1
1234: Test2
5555: Test3

我的代码添加了所有相同的项目,但我希望它也跳过相同的标识。我怎么做?也许有这么简单的方法,但我想不出来。

共有2个答案

鲜于勇
2023-03-14

您的列表包含一个Item对象,该对象的. get标识符()方法将返回1234

当然,这与字符串1234不同,因此,包含返回false。

就像我在问你:嘿,这个苹果园里有这幅苹果画吗?当然不是:果园里没有画。

您必须自己循环整个列表(编写for循环或使用streamapi)以进行检查。Java是面向对象的,因此,对象具有“标识符”的概念不是一般原则。这是您的类所拥有的,而不是其他类。

或者,您的列表

茹建茗
2023-03-14

您可以为Item的equals方法编写额外的代码,如下所示:

@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    Item item = (Item) o;
    return Objects.equals(identifier, item.identifier) ||
            Objects.equals(name, item.name);
}
 类似资料:
  • 我的代码几乎准备好了,我只是不能解决一个简单的问题。我想在ArrayList中添加和识别码以及附加到它的项目。例如,括号只是为了明确我想做什么,它们不是代码或输出的一部分: 3ZU2SD34:老卷轴(-!添加) 9ZU5SD54:国际足联21(-!添加) 3ZU2SD34:老卷轴(-!未添加,ID已在列表中) 3ZU2SD34:最终幻想(-!未添加,ID已在列表中) 4ZU8SD89:NBA2K2

  • 问题内容: 我想检查我的字符串是否包含+字符。我尝试了以下代码 但是它没有给出预期的结果。 问题答案: 您需要此: 类的方法不使用正则表达式作为参数,而是使用普通文本。 编辑: 输出:

  • 问题内容: 我有一个购物车,在下拉菜单中显示产品选项,如果它们选择“是”,我想使页面上的其他一些字段可见。 问题是购物车的文本中还包含价格修饰符,每个产品的价格修饰符可能不同。以下代码有效: 但是我宁愿使用这样的东西,它不起作用: 我只想在所选选项包含单词“是”的情况下执行操作,并且会忽略价格修饰符。 问题答案: 像这样: …或者您可以使用波浪号运算符: 之所以有效,是因为如果根本找不到该字符串,

  • 如果是-than字符串应该被移除。 我想知道为什么不是每个带有“L”的字符串都被去掉? 结果是:

  • 问题内容: 我需要检查字符串是否包含数字。任何数字。字符串是否为数字,而不是数字,但包含一个数字。 例子: ‘test’=没有数字。 ‘test2’=包含数字。 问题答案: 使用正则表达式: 不使用正则表达式:

  • 我正在寻找一个运算符,它允许我检查字段的值是否包含某个字符串。 比如: 可能吗?