繁体   English   中英

Java +带有BufferedReader的readLine

[英]Java + readLine with BufferedReader

我正在尝试从文本文件中读取一行文本并将每一行放入地图中,以便删除重复的单词(例如测试),并打印出没有重复的单词的行。 但是我一定做错了,因为我基本上只获得一行作为我的密钥,而不是每次读取一行。 有什么想法吗? 谢谢。

public DeleteDup(File f) throws IOException {

    line = new HashMap<String, Integer>();
    try {
        BufferedReader in = new BufferedReader(new FileReader(f));
        Integer lineCount = 0;
        for (String s = null; (s = in.readLine()) != null;) {
            line.put(s, lineCount);
            lineCount++;
            System.out.println("s: " + s);
        }
    }
    catch(IOException e) {
         e.printStackTrace();
    }
    this.deleteDuplicates(line);
}
private Map<String, Integer> line;

老实说,您的问题不是特别清楚-为什么您要获得lineCount ,或者deleteDuplicates将要做什么,或者为什么当它实际上不是一条线时,为什么要以这种方式命名line变量-这是一张地图,这一点并不明显从行到出现该行的最后一个行号。

除非您需要行号,否则我将使用Set<String>

然而,所有这些不谈,如果你在看keySetline之后,这是所有行。 假设文本文件确实是系统的默认编码(不幸的是,这是FileReader使用的-我通常使用InputStreamReader并明确指定编码)。

如果您可以给我们一个简短但完整的程序,那么您将用作输入的文本文件,预期输出和实际输出,将很有帮助。

您的问题不是很清楚。

但是在浏览代码段时,我认为您尝试删除每行中重复的单词。

遵循以下代码段可能会有所帮助。

public class StackOverflow {

    public static void main(String[] args) throws IOException {
        List<Set<String>> unique = new ArrayList<Set<String>>();

        BufferedReader reader = new BufferedReader(
                 new FileReader("C:\\temp\\testfile.txt"));

        String line =null;
        while((line = reader.readLine()) != null){

            String[] stringArr = line.split("\\s+");
            Set<String> strSet = new HashSet<String>();
            for(String tmpStr : stringArr){
                strSet.add(tmpStr);
            }
            unique.add(strSet);
        }       
    }
}

从您的问题中我了解到的是,打印行中没有重复单词的行。
也许您可以尝试以下代码段。

public void deleteDup(File f) 
    {
        try 
        {
            BufferedReader in = new BufferedReader(new FileReader(f));
            Integer wordCount = 0;
            boolean isDuplicate = false;
            String [] arr = null;
            for (String line = null; (line = in.readLine()) != null;) 
            {
                isDuplicate = false;
                wordCount = 0;
                wordMap.clear();

                arr = line.split("\\s+");
                for(String word : arr)
                {
                    wordCount = wordMap.get(word);
                    if(null == wordCount)
                    {
                        wordCount = 1;
                    }
                    else
                    {
                        wordCount++;
                        isDuplicate = true;
                        break;
                    }
                    wordMap.put(word, wordCount);
                }
                if(!isDuplicate)
                {
                    lines.add(line);
                }
            }
        }
        catch(IOException e) 
        {
            e.printStackTrace();
        }
    }

    private Map<String, Integer> wordMap = new HashMap<String, Integer>();
    private List<String> lines = new ArrayList<String>();

在这个片段中, 线路将包含没有重复的话在它的线条。 如果我们知道什么,发现您的问题本来会更容易

this.deleteDuplicates(line);

尝试去做。 也许它不清除任何使用的数据结构。 因此,前几行中选中的单词也将针对其他行进行检查,尽管它们不存在。

我看到的代码唯一的问题是DeleteDup没有指定返回类型。 否则,代码看起来很好,并且可以正确地从文件中读取。

请发布deleteDuplicates方法代码和使用的文件。

  1. 您将打印出每行读取的内容,而不仅仅是唯一的行。
  2. 您的deleteDuplicateLines()方法不会执行任何操作,因为HashMap中永远不会有任何重复项。

因此,目前还不清楚您的实际问题是什么。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM