【问题标题】:Delete values of an ArrayList<String> if it contains words other than numbers如果 ArrayList<String> 包含数字以外的单词,则删除它的值
【发布时间】:2014-05-28 13:10:20
【问题描述】:

我想从列表中删除所有值,除了那些只包含数字的值。比如123222

 private ArrayList<String> filters(ArrayList<String> resulting) {

    String regex = "[0-9]+"; 

    ArrayList<String> abc =resulting;

    for(String x : resulting)
    {
        if(!x.matches(regex))
        {
            abc.remove(x);
        }
    }
    return abc;
}

我在这里传递这个..

 if (results != null) {
            options.setAdapter(new ArrayAdapter<String>(this,
                    android.R.layout.simple_list_item_1, filters(results)));
        }

我已经打电话给filters(results)

但它显示了所有像你好这样的词,拜托。

【问题讨论】:

  • 您不能在迭代集合时对其进行修改。我建议您不要使用“增强型”for 循环,而是使用带有Iterator 的旧循环。迭代器实例有一个 remove() 方法,您可能会发现它很有用。
  • 此外,您将对某人通过参数提供给您的集合产生令人讨厌的副作用。也许这就是您想要的,但如果不是,我建议您创建一个仅包含与正则表达式匹配的元素的新集合。
  • 出于这个原因..我已将其初始化为 abc。我删除 abc 没有结果?请分享一些代码。
  • 字符串正则表达式 = "\\d+";可能会有所帮助。其他想法是通过索引而不是对象删除
  • @Nepster 尝试使用 ArrayList abc = new ArrayList(resulting);用于初始化 abc

标签: java android string


【解决方案1】:

这就是我会做的:

private ArrayList<String> filters(ArrayList<String> parameter) {
    String regex = "\\d+"; 

    ArrayList<String> result = new ArrayList<>();

    for(String x : parameter) {
        if(x.matches(regex)) {
            result.add(x);
        }
    }
    return result;
}

这样您就不会对提供的参数产生任何副作用。

【讨论】:

  • 干净的答案。如果可行,应该是被接受的。
  • 我会建议一些小的改进。 1.将结果ArrayList初始化为参数的大小。 2.编译正则表达式模式1次(最好是常量)。
  • 这表明您正在继续使用原始列表,而不是返回的新列表实例。
  • axierjhtjz 和 Claudio 一次都是正确的,我可以接受一个答案。我已经接受了 axierjhtz 的回答,并给你投票以平衡..
【解决方案2】:

试试这个。

private ArrayList<String> filters(ArrayList<String> resulting) {

    String regex = "[0-9]+";
    // This regex also works
    String regex = "\\d+";

    ArrayList<String> abc = new ArrayList<String>();

    for(int i = 0; i < resulting.size(); i++) {
        if(resulting.get(i).matches(regex)) {
            abc.add(resulting.get(i));
        }
    }
    return abc;
}

【讨论】:

  • 你忘了声明“x”是什么。
【解决方案3】:

如果我是你,我会使用 Pattern 和 Matcher。 只需创建一个新的 Pattern.compile(regex) 和一个新的 Matcher(line)。 然后在 Matcher.find() 时循环遍历 Matcher

【讨论】:

  • 实际上代码应该是这样的:Patter p = Pattern.compile(regex);匹配器 m = p.matcher(line);而(m.find()){做某事}
  • Matcher.findString.match 执行两种截然不同的操作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-08
  • 1970-01-01
  • 1970-01-01
  • 2022-08-15
  • 1970-01-01
  • 2017-06-13
  • 1970-01-01
相关资源
最近更新 更多