在java中从数组列表中移除一个元素



我有一个程序,它从文件中获取输入,将文件中的每个单词保存为标记,然后将每个标记添加到数组列表中。

问题是数组列表出现了,例如["cat","dog"," "," "bird"],我不想在数组列表中出现空格。

读取的文件设置如下:

cat dog

bird

很明显,空格是由空行引起的,但是空行是必要的。

总之,我的代码如下:

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
public class NewMain{
public static void main(String[] args){
    try{
        FileInputStream fstream = new FileInputStream("Filename");
        //Get the object of datainputstream
        DataInputStream in = new DataInputStream(fstream);
        BufferedReader br = new BufferedReader(new InputStreamReader(in));
        String strLine;
        List<String> listOfWords = new ArrayList<String>();
       while((strLine = br.readLine()) != null){
        String [] tokens = strLine.split("\s+");
        String [] words = tokens;
        for(String word : words){
            listOfWords.add(word);
            System.out.print(word);
            System.out.print(" ");      
        } 
        System.out.print("n");
    }
       System.out.println(listOfWords);
        List<String> space = new ArrayList<String>();
        String[] spaces = {" "};
        space.addAll(Arrays.asList(spaces));
        editList(listOfWords,space);
        System.out.println(listOfWords);
in.close();
    }
    catch(Exception e){
        System.err.println("Error: " + e.getMessage());    
    }  
}
public static void editList(Collection<String> list1, Collection<String> list2){
    Iterator<String> it = list1.iterator();
        while(it.hasNext()){         
       if(list2.contains(it.next())) {
                it.remove();
            }  
       }
}
} 

String[] spaces = {" "};应该删除空格,因为我已经通过从非文件arrayList中删除空格进行了测试。奇怪的是,如果我把它改成String[] spaces = {"cat"};它会从数组列表中删除cat

原因很明显。一个可能的解决方案是这样:

strLine = br.readLine().trim()

然后实现您的while循环为:

while (strLine != null && !strLine.isEmpty()) { //do stuff }

在for循环中添加if条件:

for(String word : words){
            if(!word.equals(""))  /* OR if( (word.length > 0) )*/  {
            listOfWords.add(word);
            System.out.print(word);
            System.out.print(" ");   
           }   
        } 

尝试删除字符串-由于您通过空格模式s+分割,您将在您的列表中有" ",但"":

String[] spaces = {""};

但是不要在之后删除它们,一开始就不要添加它们!

if (word.length() == 0) continue;
listOfWords.add(word);

(并添加您需要的任何类似的过滤器!)

这是不仅仅是简单的。它也更有效率。从数组列表中删除一个元素的代价是O(n)。因此,用于过滤的代码的复杂性是O(n^2)(通过复制到第二个列表中,可以将其降低到O(n))。一开始不添加元素基本上是免费的;通过这种方式,您的解析甚至会变得更快一点——仍然是在O(n)中,但在第二步中比filter更快。

相关内容

  • 没有找到相关文章

最新更新