Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:如何判断文本文件中的一行是否应该为空?_Java_Grammar_Context Free Grammar_Bufferedreader - Fatal编程技术网

Java:如何判断文本文件中的一行是否应该为空?

Java:如何判断文本文件中的一行是否应该为空?,java,grammar,context-free-grammar,bufferedreader,Java,Grammar,Context Free Grammar,Bufferedreader,我正在做一个项目,我必须读入一个语法文件(将它分解成我的数据结构),目标是能够生成一个随机的“DearJohnLetter” 我的问题是,在读取.txt文件时,我不知道如何确定该文件是否应该是一个完全空白的行,这对程序是有害的 下面是一个文件部分的示例,如何判断下一行是否应该是空行?(顺便说一句,我只是使用一个缓冲阅读器)谢谢 我不得不和你分手,因为。但我们还是要继续。 ,也因为 我爸爸不喜欢你 我爱上了你 我以前没告诉过你,但是 我们出去的时候我不忍心告诉你,但是 你再也不和我在一起了 你

我正在做一个项目,我必须读入一个语法文件(将它分解成我的数据结构),目标是能够生成一个随机的“DearJohnLetter”

我的问题是,在读取.txt文件时,我不知道如何确定该文件是否应该是一个完全空白的行,这对程序是有害的

下面是一个文件部分的示例,如何判断下一行是否应该是空行?(顺便说一句,我只是使用一个缓冲阅读器)谢谢



我不得不和你分手,因为。但我们还是要继续。
,也因为
我爸爸不喜欢你
我爱上了你
我以前没告诉过你,但是
我们出去的时候我不忍心告诉你,但是
你再也不和我在一起了
你不再需要了
我爸爸说你是个坏消息

如果我理解正确,您只想在一行中确定下一行是否为空

如果为真,那么这里有一个启动示例:

package com.stackoverflow.q2405942;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;

public class Test {

    public static void main(String... args) throws IOException {
        BufferedReader reader = null;
        try {
            reader = new BufferedReader(new InputStreamReader(new FileInputStream("/test.txt")));
            for (String next, line = reader.readLine(); line != null; line = next) {
                next = reader.readLine();
                boolean nextIsBlank = next != null && next.isEmpty();
                System.out.println(line + " -- next line is blank: " + nextIsBlank);
            }
        } finally {
            if (reader != null) try { reader.close(); } catch (IOException logOrIgnore) {}
        }
    }

}
这将打印以下内容:

<start> -- next line is blank: false
I have to break up with you because <reason> . But let's still <disclaimer> . -- next line is blank: true
 -- next line is blank: false
<reason> -- next line is blank: false
<dubious-excuse> -- next line is blank: false
<dubious-excuse> , and also because <reason> -- next line is blank: true
 -- next line is blank: false
<dubious-excuse> -- next line is blank: false
my <person> doesn't like you -- next line is blank: false
I'm in love with <another> -- next line is blank: false
I haven't told you this before but <harsh> -- next line is blank: false
I didn't have the heart to tell you this when we were going out, but <harsh> -- next line is blank: false
you never <romantic-with-me> with me any more -- next line is blank: false
you don't <romantic> any more -- next line is blank: false
my <someone> said you were bad news -- next line is blank: false
--下一行为空:false
我不得不和你分手,因为。但我们还是要坚持下一行为空:true
--下一行为空:false
--下一行为空:false
--下一行为空:false
,还因为--下一行是空的:true
--下一行为空:false
--下一行为空:false
我爸爸不喜欢你--下一行是空白的:false
我爱上了--下一行是空白的:false
我以前没告诉过你们,但下一行是空白的:false
我们出去的时候我不忍心告诉你,但是——下一行是空白的:false
你再也不会和我在一起了——下一行是空白的:false
您不再需要了--下一行是空的:false
我爸爸说你是个坏消息——下一行是空白的:false

如果我理解正确,您只想在一行中确定下一行是否为空

如果为真,那么这里有一个启动示例:

package com.stackoverflow.q2405942;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;

public class Test {

    public static void main(String... args) throws IOException {
        BufferedReader reader = null;
        try {
            reader = new BufferedReader(new InputStreamReader(new FileInputStream("/test.txt")));
            for (String next, line = reader.readLine(); line != null; line = next) {
                next = reader.readLine();
                boolean nextIsBlank = next != null && next.isEmpty();
                System.out.println(line + " -- next line is blank: " + nextIsBlank);
            }
        } finally {
            if (reader != null) try { reader.close(); } catch (IOException logOrIgnore) {}
        }
    }

}
这将打印以下内容:

<start> -- next line is blank: false
I have to break up with you because <reason> . But let's still <disclaimer> . -- next line is blank: true
 -- next line is blank: false
<reason> -- next line is blank: false
<dubious-excuse> -- next line is blank: false
<dubious-excuse> , and also because <reason> -- next line is blank: true
 -- next line is blank: false
<dubious-excuse> -- next line is blank: false
my <person> doesn't like you -- next line is blank: false
I'm in love with <another> -- next line is blank: false
I haven't told you this before but <harsh> -- next line is blank: false
I didn't have the heart to tell you this when we were going out, but <harsh> -- next line is blank: false
you never <romantic-with-me> with me any more -- next line is blank: false
you don't <romantic> any more -- next line is blank: false
my <someone> said you were bad news -- next line is blank: false
--下一行为空:false
我不得不和你分手,因为。但我们还是要坚持下一行为空:true
--下一行为空:false
--下一行为空:false
--下一行为空:false
,还因为--下一行是空的:true
--下一行为空:false
--下一行为空:false
我爸爸不喜欢你--下一行是空白的:false
我爱上了--下一行是空白的:false
我以前没告诉过你们,但下一行是空白的:false
我们出去的时候我不忍心告诉你,但是——下一行是空白的:false
你再也不会和我在一起了——下一行是空白的:false
您不再需要了--下一行是空的:false
我爸爸说你是个坏消息——下一行是空白的:false

简言之:您只想在
BufferedReader#readLine()
循环中确定下一行是否为空(
line.isEmpty()==true
)?如果您可以更改文本,我将使用类似
%REASON
的内容通知您可以在何处替换原因。这可能是一种更好的查找空行的方法。@BalusC我基本上就是这么做的,但出于某种原因,它从不将一行读取为空(最后一行总是空的除外)不起作用:/@Anthony是的,我可以修改它。嗯,应该允许我完成这个程序的其余部分,谢谢:)有人知道没有标签做同样的事情来做空白行吗?我想你用一个“空字符串”混淆了<代码> null >代码>(<代码>字符串< /代码>,它返回<代码> 0代码>代码> <代码>字符串。和
true
对于
string.isEmpty()
。无论如何,请参见我的答案作为示例。简而言之:您只需要在
BufferedReader#readLine()
循环中确定下一行是否为空(
line.isEmpty()==true
)是否?如果您可以更改文本,我会使用类似于
%REASON
的方法通知您可以在何处替换原因。这可能是查找空行的更好方法。@BalusC这是我基本上要做的,但出于某种原因,它从不将行读取为空(最后一行总是空的除外)不起作用:/安东尼:是的,我可以修改它。嗯,应该允许我完成程序的其余部分,谢谢:)有人知道没有标签做同样的事情的方式来充当空白行吗?我想你用“空字符串”混淆了<代码> null <代码>。(一个
String
对于
String.length()
返回
0
,对于
String.isEmpty()
返回
true
String.isEmpty()。无论如何,请看我的答案作为一个例子。哇,谢谢,是的,我应该能够使用这个基本逻辑。(我实际做的是浏览文件,并将第一行变成一个“非终结符号”)之后的所有行直到空格都是“productions”,或者它可以变成的东西)然后继续每个部分,谢谢:)哇,谢谢,是的,我应该能够使用这个基本逻辑。(我实际做的是浏览文件,把第一行变成“非终结符”之后的所有行直到空白处都是“productions”,或者它可以变成的东西)然后为每个部分继续,谢谢:)