【问题标题】:Java can't read that the character is a new lineJava 无法读取该字符是换行符
【发布时间】:2014-05-27 17:42:28
【问题描述】:
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" 但结果与第一个相同。

我做错了什么?

【问题讨论】:

  • 在哪里设置 nextCharacter?
  • nextCharacter 是您在某处定义的方法吗?尝试提供一个简短的 可编译 示例来演示该问题。就目前而言,我们无法测试此代码。
  • 请提供输入+输出
  • x 使用 i.read() 读取输入输入是一个空白文本文件,我在其中单击了两次输入。所以输出应该让我知道文件的结尾在第 3 行。我使用@Actimia 建议将其设为 Character.isWhitespace(x) 并且它可以工作,除了行号是 5 而不是 3。我打印了一些语句来查看 x 是什么,它说 x = 13 x: 10 x: 13 x: 10
  • @Takendarkk nextCharacter 是输入文件中的下一个字符。

标签: java loops while-loop char newline


【解决方案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();

【讨论】:

    【解决方案2】:

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

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

    Character.isWhitespace(char) 的文档是 here

    【讨论】:

    • 我把它改成了这个,它可以工作,但文件的结尾应该是第 3 行,但它会上升到第 5 行。它打印出 x = 13 x: 10 x: 13 x: 10
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2017-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-06
      相关资源
      最近更新 更多