Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.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 can';我看不出这个角色是一个新行_Java_Loops_While Loop_Char_Newline - Fatal编程技术网

Java can';我看不出这个角色是一个新行

Java can';我看不出这个角色是一个新行,java,loops,while-loop,char,newline,Java,Loops,While Loop,Char,Newline,我正在读取一个有三个空行的输入文本文件。x逐字读取。x等于一条新线,因此它假设进入while循环,但它不进入while循环。我调试了代码并打印出来检查x是否有新行。它打印出x=13,x=10,x=10。在这三种情况下,它都跳过while循环 我尝试的另一种方法是: if (first == true) { x = input.read(); // input is a Reader nextCharacter = input.read(); first = false;

我正在读取一个有三个空行的输入文本文件。x逐字读取。x等于一条新线,因此它假设进入while循环,但它不进入while循环。我调试了代码并打印出来检查x是否有新行。它打印出x=13,x=10,x=10。在这三种情况下,它都跳过while循环

我尝试的另一种方法是:

if (first == true) {
    x = input.read(); // input is a Reader
    nextCharacter = input.read();
    first = false;
}
else {
    x = nextCharacter;
    nextCharacter = input.read();
    charPosition++;
}

while (x == ' ' || x == '\n') {
    if (x == ' ') {
        x = nextCharacter;
    }
    else {
        x = nextCharacter;
    }
}
当我在自己的while循环中写入它时,它将第二次进入循环(x=10),但当x=10时第三次返回。这是不应该发生的,它应该留在循环中,直到它到达文件的末尾(x=-1)

我还尝试了Character.toString((char)nextChar)=“\r\n”,但结果与第一个相同

我做错了什么?

“空行”可能有点模糊。您的“\r\n”尝试接近问题的根本原因(应该通过.equals而不是==”比较字符串)


另一种解决方案是创建一个正确的输入文件,其中新行实际上只是“\n”而不是“\r\n”(ascii代码13、10)。

您可以尝试使用类似

while(x == '\n') {
    System.out.println("entered");
    x = nextCharacter;
}
Character.isWhitespace(char)
的文档是

我正在读取一个有三个空行的输入文本文件

更好的方法是逐行读取,并检查每一行是否为空。

示例代码:

while (Character.isWhitespace(x){
    // skip
}

在哪里设置nextCharacter?是您在某处定义的方法吗?试着提供一个简短的可编译示例来说明问题。目前,我们无法测试此代码。请提供input+outputx使用i.read()读取输入。输入是一个空白文本文件,我在其中单击了两次enter。所以输出应该告诉我文件的结尾在第3行。我使用@Actimia suggestion将其设置为字符。isWhitespace(x)可以使用,但行号是5而不是3。我打印了一些语句,看看x是什么,它说x=13x:10x:13x:10@TakendarkknextCharacter是输入文件中的下一个字符。我将其更改为此,它可以工作,但文件结尾应该是第3行,但它会上升到第5行。它打印出x=13x:10x:13x:10
    BufferedReader reader = new BufferedReader(new FileReader(new File("resources/abc.txt")));

    String line = null;
    while ((line = reader.readLine()) != null) {
        if (!line.isEmpty()) {
            System.out.println(line);
            // do whatever you want to do with char array if needed
            // char[] arr=line.toCharArray();
        }
    }
    reader.close();