Java 过滤字符串的数组列表
我有一个字符串数组列表,我想删除低于一定长度的字符串。我在想这个方法:Java 过滤字符串的数组列表,java,Java,我有一个字符串数组列表,我想删除低于一定长度的字符串。我在想这个方法: for (int i = 0; i < result.size(); i++) { if (result.get(i).split("\\s").length != maxLength) { System.out.println(result.get(i)); result.remove(i); }
for (int i = 0; i < result.size(); i++) {
if (result.get(i).split("\\s").length != maxLength) {
System.out.println(result.get(i));
result.remove(i);
}
}
for(int i=0;i
但它只是删除了几个条目,因为当它删除一个条目时,它会将下一个条目替换为已删除的条目。另一种方法是什么尝试从最后一个迭代到第一个:
for (int i = result.size() - 1; i >= 0; i--) {
if (result.get(i).split("\\s").length != maxLength) {
System.out.println(result.get(i));
result.remove(i);
}
}
当您删除一个时,您应该减少索引,以考虑到以下内容已发生移动,如
result.remove(i-)
您需要再次修改i
,以确保它覆盖了数组列表的完整序列,或者如其他答案所示,最后一步->第一步
for (int i = 0; i < result.size(); i++) {
if (result.get(i).split("\\s").length != maxLength) {
result.remove(i);
i--; // everything has been moved up in the arraylist
}
}
或:
使用迭代器,例如:
final Iterator<String> x = list.iterator();
while (iterator.hasNext()) {
if (someCondition) {
iterator.remove();
}
}
final迭代器x=list.Iterator();
while(iterator.hasNext()){
如果(某些条件){
iterator.remove();
}
}
切勿以这种方式从ArrayList中删除。请改用迭代器:
Iterator<String> stringIterator = result.iterator();
while (stringIterator.hasNext()) {
String string = stringIterator.next();
if (string.split("\\s").length != maxLength) {
System.out.println(string);
stringIterator.remove();
}
}
Iterator stringIterator=result.Iterator();
while(stringIterator.hasNext()){
String=stringIterator.next();
if(string.split(“\\s”).length!=maxLength){
System.out.println(字符串);
stringIterator.remove();
}
}
你需要从终点开始,一路前行
for (int i = result.size() - 1; i >= 0; i--) {
if (result.get(i).length < maxLength) {
System.out.println(result.get(i));
result.remove(i);
}
}
for(int i=result.size()-1;i>=0;i--){
if(result.get(i).length
要从集合中删除元素,应使用迭代器
for (Iterator<String> iter = list.iterator(); iter.hasNext();) {
String s = iter.next();
if (s.split("\\s").length != maxLength) {
iter.remove();
}
else {
System.out.println(s);
}
}
for(迭代器iter=list.Iterator();iter.hasNext();){
字符串s=iter.next();
如果(s.split(“\\s”).length!=最大长度){
iter.remove();
}
否则{
系统输出打印项次;
}
}
如果您碰巧使用:
你想干什么?您正在测试由字符串返回的数组长度,该字符串由文本“\s”分割。我还没有看到您的字符串列表,但我希望test语句总是计算1!=maxLength。在所有编程中,传统的做法是从结尾向后走。
for (int i = result.size() - 1; i >= 0; i--) {
if (result.get(i).length < maxLength) {
System.out.println(result.get(i));
result.remove(i);
}
}
for (Iterator<String> iter = list.iterator(); iter.hasNext();) {
String s = iter.next();
if (s.split("\\s").length != maxLength) {
iter.remove();
}
else {
System.out.println(s);
}
}
CollectionUtils.filter(result, new Predicate()
{
@Override
public boolean evaluate(Object object)
{
return ((String) object).split("\\s").length >= maxLength;
}
}));