从arraylist中删除元素,其中包含相同类型的所有字符

时间:2017-08-24 06:00:21

标签: java arraylist

从arraylist中删除任何项目的最佳方法是什么,其中包含相同类型的所有字符?

请参考下面的示例字符串数组列表数据:
要素1:FFFFFFFF
要素2:123
要素3:ABCD1234
要素4:FFFFFFFFFFFFFFFFF
要素5:ABCDEF
从上面的数据,我想删除第1和第4条记录,因为它们包含所有字符“F”。

到目前为止我所尝试的内容在下面的伪代码中解释:
1.将列表迭代到循环结束 2.获取当前元素的数据
3.检查元素字符串是否包含所有“F”字符,而不是其他内容 4.如果是,请注意当前元素的索引位置移动到下一个元素
5.使用第二个循环从存储的索引位置中删除元素
6.在这里我遇到了困难,因为从arraylist中删除一个元素会改变其大小和剩余元素的索引位置

注意#如果该方法是动态的,可以提供任何字符(如果该元素包含所有“A”),将会更有帮助。

3 个答案:

答案 0 :(得分:1)

您可以使用正则表达式调用List.removeIf()来测试重复字符:

listOfData.removeIf(s -> s.matches("(.)\\1*"));

打破正则表达式:

  • .匹配任何字符
  • (.)捕获第一个字符
  • 捕获的
  • \1反向引用
  • *找到0个或更多相同的

换句话说,如果字符串只包含一个字符后跟 n 次,则将其删除。

如果你想测试特定的重复字符,比如说c,那就更容易了:

listOfData.removeIf(s -> s.matches(c + "+"));

这意味着"匹配c"的一个或多个实例。请注意,这不会处理'('等特殊字符。

答案 1 :(得分:0)

 String s=//populate data of string here
 int distinct = 1 ;

 for (int j = 0; j < s.length(); j++) {

        if(s.charAt(0)==s.charAt(j))
        {
            distinct++;

        }
    }  
   if(s.length==distinct){
  //all characters are same and remove  
  }

答案 2 :(得分:0)

如果您使用的是Java 8,则可以使用List.removeIf()作为@shmosel建议。但是,如果您想在较旧的Java版本下编译代码,请尝试以下内容。

public static void removeCharacterSetElementFromList(char character, ArrayList<String> list){
    ArrayList<String> listCopy = (ArrayList<String>)list.clone();
    for (String listItem : listCopy){
        boolean removable = listItem.length()>0 && character==listItem.charAt(0);
        for (int i = 0; i < listItem.length(); i++){
            char current = listItem.charAt(i);
            if (character!=current) {
                removable=false;
                break;
            }
        }
        if(removable) list.remove(listItem);
    }
}

然后,您只需拨打removeCharacterSetElementFromList('F',listOfData);即可删除重新编码。