从文本文件中按照字符和行进行读取

6

对于一个非常基础的RPG游戏(目前只是一个自由走动的游戏),我想要创建一种方法,用来读取并将“存档”文件储存在内存中(保存功能稍后再做)。我希望这个存档文件是用户友好的,通过一种方式来使其中某些行不能被该方法读取,这样我就可以在里面放置修改说明之类的内容。目前的计划是不读取以%开头的行,但如果%会引起问题,则可以更改。

我希望将存档格式本身压缩成一个块 - 一个或两个字母数字字符表示单个“瓷砖”的内容。我不想为每个区域的屏幕都有169行,而是希望将它们压缩到13 * 13的块中(同样是为了用户友好性)。

基本上,我想知道如何同时实现以下几点: a)检测一行是否以%开头 b)如果是,则跳转到下一行 c)如果不是,则每次读取两个字符并复制到字符串数组中 d)跳过空白行

我了解基本的IO操作,但一直没有找到同时按字符和按行读取的方法。

3个回答

3

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


抱歉,还有一个不需要单独主题的快速问题:是否有任何简便的方法可以不要求每个与该数据交互的方法(即每个方法)都具有"throws IOException"子句? - JTTCOTE
无法消除 IOException 抛出的可能性。您需要决定如何处理它以及在哪里处理它。一种可能的方法是捕获异常并抛出未经检查的 RuntimeException - SimonC

1

0
我会使用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来解析每行。 - David K

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接