【问题标题】:Using Scanner to test if a line is a comment使用 Scanner 测试一行是否是注释
【发布时间】:2017-02-05 00:28:40
【问题描述】:

我正在尝试扫描一个 .ppm 文件。我需要忽略以“#”开头的行。我将如何使用扫描仪执行此操作? 如果我这样做

while((fileScanner.nextLine()).charAt(0)=='#'){
        //Go to next line
    }

如果该行没有以注释开头,那么我跳过了该行,并且无法返回以获取该行中的相关数据。 有谁知道如何解决这个问题?

【问题讨论】:

  • != 就是你所需要的。
  • 哦,哇,现在我觉得自己很笨。谢谢
  • 旁注:这个问题让我笑了,因为我已经为我正在开发的软件编写了代码。
  • 但是,这不会移动到下一行吗?我有点困惑如何在 while 语句中询问不会将流向前移动

标签: java java.util.scanner


【解决方案1】:
while (fileScanner.hasNextLine()) {
    String line = fileScanner.nextLine();
    if (line.startsWith("#")) {
        continue;
    }
    // Go to next line
}

以上是一个更充分的模式。当文件以注释结尾时,原始代码有点问题。行也可以是空的,这样 charAt 就不行了。

【讨论】:

  • 谢谢,这很好地解决了整个问题
  • 因此,如果该行不以注释开头,我需要解析行变量以获取 int 值吗? (cmets 将位于第二行,就在图像尺寸之前)
  • 我无法更好地表述它。 “转到下一行”是对非注释行进行任何处理的地方。
【解决方案2】:

让我们看看你的 while 循环。

while((fileScanner.nextLine()).charAt(0)=='#'){

您是说“扫描下一行,如果第一个字符是'#',则执行循环体”

这种方法有几个问题:

  1. 一旦您没有找到评论,它就会停止循环。
  2. 没有任何行被存储在变量中,它们只是被丢弃了。

与其从条件语句中的文件读取,不如利用continue 语句?

while (fileScanner.hasNextLine()) {
    String line = fileScanner.nextLine();
    if (line.charAt(0) == '#') {
        continue; // Found a comment, so skip this iteration.
    } else {
        // Do whatever you want with your non-comment line.
    }
}

注意:有些 cmets 前面可能有空格,例如" # comment"。我假设你不在乎这些。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-07
    • 1970-01-01
    • 2021-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-20
    • 2015-03-19
    相关资源
    最近更新 更多