2012-04-22 37 views
1

我一直有很多麻烦,试图让扫描仪或缓冲读取器尝试和检测一个空行。例如,如果我有一个包含文件:Java扫描仪检测空行?

there 
cat 
dog 
(BLANK LINE) 

如果我这样做:

while(scan.hasNextLine()) 
{ 
String line = scan.nextLine(); 
... 
... 
} 

扫描仪不拿起空行。我也尝试使用缓冲读取器,但我碰到这个问题。有没有什么方法可以让扫描器只要返回一个“”,每当它找到这样的空行?欢呼声

+0

空行是输入的最后一行吗? – aioobe 2012-04-22 08:23:11

+0

是的,它是输入的最后一行 – Chrispy 2012-04-22 08:24:24

+0

为了更好地提供帮助,请发布[SSCCE](http://sscce.org/)。 – 2012-04-22 08:29:10

回答

3

您的输入有多少行,因为它有\n个字符。给定了输入

"there\ncat\ndog\n" 

下一行将被正确地划分为

"there\n" 
"cat\n" 
"dog\n" 

(换句话说,没有第四空白行,因为它不是由\n终止。)

换句话说,在"dog\n"已被读取后,扫描仪(或缓冲读取器)已达到EOF并且甚至没有空行返回。 (请注意,当行被返回时,新行字符被剥离。)

所以,由于这是预期的行为,我不知道最简单的修复方法是什么。我怀疑解决这个问题的最好方法是简单地将\n添加到输入中,以便循环运行额外的迭代。

+0

实际上,在输入的末尾附加一个换行符听起来像是会有诀窍!唯一的问题是我很不确定我应该如何去做。我正在阅读这样一个文件atm:scan = new Scanner(new BufferedReader(new FileReader(args [0])));有任何想法吗? (我不想修改我正在直接阅读的文件并添加一个换行符) – Chrispy 2012-04-22 08:40:35

+0

使用'扫描仪'或'BufferedReader',无法确定接收到的行是否以换行符结束是你需要知道的,如果你想添加一个新行,如果它不包含在输入的最后一行)。你必须用我认为不同的方法。 – aioobe 2012-04-22 08:50:26

+0

编辑据我所知,扫描仪删除空白行 - 如果您确定文件以空行结束,请在此之后添加“\ n”,但不够优雅,但可能有用。 – 2012-04-22 14:52:15