Java无法读取该字符是一个新行

时间:2014-04-13 21:27:15

标签: java loops while-loop char newline

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;
    }
}

我正在阅读一个包含三个空行的输入文本文件。 x逐个字符地读取。 x等于一个新行,所以它假设进入while循环,但它没有。我调试了代码并打印出来以检查x是否持有新行。打印出x = 13,x = 10,x = 10.在所有这三种情况下,它都会跳过while循环。

我尝试的另一种方法:

while(x == '\n') {
    System.out.println("entered");
    x = nextCharacter;
}

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

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

我做错了什么?

3 个答案:

答案 0 :(得分:1)

  

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

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

示例代码:

    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();

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

您可以尝试使用类似

的内容
while (Character.isWhitespace(x){
    // skip
}

Character.isWhitespace(char)的文档是here