2017-08-24 67 views
-2

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

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

我迄今试图在下面的伪代码解释:
1.迭代列表,直到在一个循环的结束
2.获取当前元素
3.检查元素字符串的数据包含所有“F”字符而没有其他内容。
4.如果是的话,请注意当前元素的索引位置,否则移动到下一个元素
5.使用第二循环从存储的索引位置
6.这里我被困删除元素,因为去除ArrayList的某个元素发生变化其余元素的大小和索引位置

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

+2

在张贴这里之前,您无疑已尝试了许多可能的解决方案。请将这些添加到您的问题,并澄清什么是行不通的。 –

+0

你已经尝试过了什么? –

+0

*相同*类型或一个*特定*类型的所有字符? – shmosel

回答

1

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

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

要打破正则表达式:

  • .匹配任何字符
  • (.)捕捉第一字符
  • \1个反向引用捕获
  • *发现0或多个相同

的换句话说,如果字符串仅包括字符,随后本身Ñ次,将其删除。

如果你想测试一个特定重复性格,说c,那就更简单了:

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

这意味着“匹配c一个或多个实例”。请注意,这不处理像'('这样的特殊字符。

+0

你能告诉我这是什么? – Aman

+0

我用“(F)”代替“(。)”。另外我读了我可以根据我在笔记中提到的需要在这里放置任何角色。正是我想要的。感谢您的时间和帮助。 :-) – Aman

+0

正如我所说,您不需要第一个解决方案来匹配特定字符。只要做'F +''。 – shmosel

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 
    } 
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);删除重新编码。

+1

https://codereview.stackexchange.com/questions/64011/removing-elements-on-a-list-while-iterating-through -it –

相关问题