Java无法读取字符是换行符


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",但结果与第一个相同。

我做错了什么?

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

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

样本代码:

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

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

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

您可以尝试使用类似的东西

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

Character.isWhitespace(char)的文档在这里。

相关内容

  • 没有找到相关文章

最新更新