从arraylist中删除任何项目的最佳方法是什么,其中包含相同类型的所有字符?
请参考下面的示例字符串数组列表数据:
要素1:FFFFFFFF
要素2:123
要素3:ABCD1234
要素4:FFFFFFFFFFFFFFFFF
要素5:ABCDEF
从上面的数据,我想删除第1和第4条记录,因为它们包含所有字符“F”。
到目前为止我所尝试的内容在下面的伪代码中解释:
1.将列表迭代到循环结束
2.获取当前元素的数据
3.检查元素字符串是否包含所有“F”字符,而不是其他内容
4.如果是,请注意当前元素的索引位置移动到下一个元素
5.使用第二个循环从存储的索引位置中删除元素
6.在这里我遇到了困难,因为从arraylist中删除一个元素会改变其大小和剩余元素的索引位置
注意#如果该方法是动态的,可以提供任何字符(如果该元素包含所有“A”),将会更有帮助。
答案 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);
即可删除重新编码。