我正在写2个文本文件,我想要一个eaiser方法来阅读文本文件而没有所有的单词和数字相互靠近,所以我选择用一个标签来编写它们以分开它们。但是当我这样做时,我的班级LineNumberReader
似乎认为该标签是一个新行。
我有2节课。 TextWriting
和compareTextFiles
当我运行TextWriting
类时,我可以获得如下输出:
(1)word1
(2)word2
(3)word3
所以它按预期工作。 (我使用空格进行格式化,但文件正确包含选项卡)
在我的另一个班级compareTextFiles
中,我比较了我从第一堂课写的2个文本文件。重要的代码就是这个。
String word,word2;
int i;
lnr = new LineNumberReader(new FileReader(file));
while (sc.hasNext() && sc2.hasNext()) {
word = sc.next();
word2 = sc2.next();
lnr.readLine();
if (word.equalsIgnoreCase(word2)) {
i = lnr.getLineNumber();
System.out.println("Line number: " + i + " and the word: [" + word + "]" + " and the word " + "[" + word2 + "]" + " is the same!");
}
else
System.out.println("[" + word + "]" + " and " + "[" + word2 + "]" + " is not the same");
}
我收到的输出是:
行号:1和单词:[(1)]和单词[(1)]是相同的!
行号:2和单词:[asd]和单词[asd]是相同的!
行号:3和单词:[(2)]和单词[(2)]是相同的!
行号:3和单词:[yeye]和单词[yeye]是一样的!
行号:3和单词:[(3)]和单词[(3)]是相同的!
行号:3和单词:[he]和单词[he]是相同的!
为什么它会被困3次,标签是否会创建某种新行?
答案 0 :(得分:1)
您的代码为每个扫描程序令牌调用LineNumberReader.readLine
。假设a)每个扫描程序使用默认分隔符(在这种情况下每行有2个令牌)b)LineNumberReader.readLine
增加LineNumberReader.getLineNumber
返回的值,直到文件已完全为止read - 然后对于每个令牌(而不是每一行),它将递增,直到读取3行(然后停止递增),从而得到你得到的输出。
另一种建议(有很多方法可以遮盖这只猫):考虑只使用2个扫描仪来读取文件,使用Scanner.readLine
方法读取文件。对于每一行,增加表示行号的变量,然后根据需要解析行。
int lineCount = 0;
while ( sc.hasNextLine() && sc2.hasNextLine() ){
lineCount++;
String line1 = sc.nextLine();
String line2 = sc2.nextLine();
//parse the lines
String[] line1tabs = line1.split("\t");
//etc...
}