【问题标题】:Read by both char and line from text file由文本文件中的字符和行读取
【发布时间】:2013-02-14 13:39:54
【问题描述】:

对于一个非常基本的 RPG(好吧,目前是自上而下在游戏中四处走动),我想创建一个读取“保存”文件并将其存储在内存中的方法(稍后会进行保存。)我想要这个通过一种方法使该方法不读取文件的某些行,将文件保存为用户友好的,这样我就可以对修改它等进行说明。目前,计划是让它不读取前面带有 % 的行,但如果 % 导致问题,则可以更改。

我希望在一个压缩块中包含的保存格式本身 - 一个或两个字母数字字符表示单个“图块”的内容。我不想简单地为每个屏幕区域设置 169 行,我宁愿将它们放在 13*13 的压缩块中(再次,为了用户友好。)

基本上,我怎么能两者兼得 a) 检测一行是否以 % 开头 b) 如果是,跳到下一行 c)如果不是,一次读取两个字符复制到字符串数组 d) 跳过空行

我了解 BASIC IO,但我一直无法找到一种按字符和按行阅读的方法。

【问题讨论】:

    标签: java file-io


    【解决方案1】:

    就个人而言,我会使用BufferedReader 将文件逐行读取到单个String 对象中,并检查内容。您可以使用巧妙命名的String.startsWith("%") 方法检查一行是否以注释字符开头,并使用String.charAt(index) 获取行中的单个字符,或使用String.substring(start, start+2) 获取双字符。

    【讨论】:

    • 对不起,还有一个不保证它自己的主题的快速问题:是否有任何方法(以相当简单的方式)不需要与该数据交互的每个方法(即每个方法)都有一个 throws IOException 子句?
    • 没有办法消除IOException 被抛出的可能性。您需要决定如何以及在何处处理它。 一种可能的方法是捕获异常并抛出未经检查的RuntimeException
    【解决方案2】:

    看看扫描器类http://docs.oracle.com/javase/tutorial/essential/io/scanning.html它应该能够完成大部分工作。

    【讨论】:

      【解决方案3】:

      我会使用 Scanner 逐行阅读,解析前几个字符,然后在需要时继续。示例:

      Scanner lineReader = new Scanner(new FileReader(filename));
      Scanner parser;
      while (scanner.hasNextLine()){
        parser = new Scanner(scanner.nextLine());
        if(parser.hasNext())){ //checks for blank line
          String firstWord = parser.next();
          if(/*Check for %*/)
            continue;
          else
            //parse as you will
        }
      }
      

      【讨论】:

      • 不过,如果您的字符对没有分隔,您可能不想使用第二个 Scanner 来解析每一行。
      猜你喜欢
      • 2016-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多