【问题标题】:How can I remove Strings from an ArrayList which contain only whitespace characters?如何从仅包含空格字符的 ArrayList 中删除字符串?
【发布时间】:2018-02-08 03:07:10
【问题描述】:

我想删除列表中仅包含空白字符的所有字符串。我尝试了以下代码,但有些行没有被删除:

List<String> getarray = /* ... */;

for (int i = 0; i < getarray.size(); i++) {
    if (getarray.contains(" ").getarray.contains(null)) {
        getarray.remove(i);
    } else {
        System.out.println("a: " + getarray.get(i));
    }
}

这仅适用于某些输入,有人可以帮我理解为什么吗?

Here is a list of inputs which did not work as intended

【问题讨论】:

  • 您想删除其中只有空格字符的任何行吗?试试String.trim 然后String.isEmpty
  • @krunal 看看我发布的答案,它更快更小代码;)
  • @azro 我同意,你的代码更小,看起来更漂亮,但对于刚刚学习编程或 Java 新手来说,这真的很难理解。我认为 krunal 试图理解循环和字符串是如何工作的,lambdas 和流 api 可能有点太多了。

标签: java string arraylist


【解决方案1】:

首先使用一些 Iterator 来迭代并执行从 ArrayList 中删除元素的操作。

其次要解决你的空字符串问题,你可以使用 trim()isEmpty() 方法

试试下面的代码:

Iterator<String> it = getarray.iterator();
while (it.hasNext()) {
      String myValue = it.next();
      if (myValue.trim().isEmpty()) {
            it.remove();
      } else {
            System.out.println("a: " + myValue);
      }
}

【讨论】:

    【解决方案2】:

    如果要删除元素,请使用迭代器。根据 Java 文档:

    迭代器在 Java 集合框架中取代了枚举。迭代器在两个方面不同于枚举: 迭代器允许调用者在具有明确定义的语义的迭代期间从底层集合中删除元素。 改进了方法名称

    试试下面的代码:

    Iterator<String> itr = getarray.iterator();
        while (itr.hasNext()) {
            String value = itr.next();
            if (value.trim().isEmpty()) {
                itr.remove();
            } else {
                System.out.println("a: " + value);
            }
        }
    

    【讨论】:

    • 您将删除所有包含空格的元素,而不是空元素^^
    • 我有点误解了这个问题。谢谢。
    【解决方案3】:

    元素为空或仅由空格组成元素包含空格之间的误解:

    所以是element.trim().isEmpty() 而不是element.contains(" ");

    .trim() 删除String 开头和结尾处的空格


    所以这会做你的事情,它会遍历列表,并且只保留不为空的元素(或仅由空格组成)

    getarray = getarray.stream().filter(s -> !s.trim().isEmpty()).collect(Collectors.toList());
    

    如果你想在做完之后打印所有内容:getarray.forEach(System.out::println);

    【讨论】:

      猜你喜欢
      • 2012-09-05
      • 2015-01-13
      • 2011-09-21
      • 2020-02-02
      • 1970-01-01
      • 1970-01-01
      • 2021-09-04
      • 2016-02-26
      • 1970-01-01
      相关资源
      最近更新 更多