[英]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>
。
然而,所有这些不谈,如果你在看keySet
的line
之后,这将是所有行。 假设文本文件确实是系统的默认编码(不幸的是,这是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方法代码和使用的文件。
因此,目前还不清楚您的实际问题是什么。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.