在文本文件中写“\ t”会创建一行?

时间:2015-05-31 21:34:57

标签: java text-files line-numbers

我正在写2个文本文件,我想要一个eaiser方法来阅读文本文件而没有所有的单词和数字相互靠近,所以我选择用一个标签来编写它们以分开它们。但是当我这样做时,我的班级LineNumberReader似乎认为该标签是一个新行。

我有2节课。 TextWritingcompareTextFiles

当我运行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次,标签是否会创建某种新行?

1 个答案:

答案 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...
}