【问题标题】:String tokenizer and parsing plain text JAVA字符串标记器和解析纯文本 JAVA
【发布时间】:2014-03-02 22:58:49
【问题描述】:

我正在制作一个简单的基于文本的纸牌游戏,用于解析文件的乐趣/练习。我有一个包含该卡所有规格的纯文本文件。我的卡片以“##########”分开。它们是多线的。现在,我只是希望能够随时提取任何一张卡的全部内容。例如,玩家选择角色 1,所以我只拉出卡片 1?怎么样?

EXAMPLE: 
##########
CARD 1
Character Name: 
Something Else:
##########
CARD 2
Character Name: 
Something Else:
##########
Character Name: 
Something Else:
##########

我怎样才能真正拆分卡片,以便我可以询问用户哪张卡片。 我不想像以前那样阅读这些行并打印出来。这是相当麻烦和令人费解的。 我的新尝试: ArrayList listForCard1 = new ArrayList(); 整数 selected_card = 1;

        try {

            String line;
            FileReader fR = new FileReader("MyText.txt");
            BufferedReader br = new BufferedReader(fR);
            int x = 0;
            Integer card = 1;
            while ((line = br.readLine()) != null) {
                ALines[x] = line;
                x++;
                if (line.contains("##########")) {
                    if ( card == selected_card) {
                       listForCard1.add(br.readLine());
                      // System.out.println(br.readLine());
                       break;
                    } else {
                       card++;
                    }
                }

            }
            System.out.println("Done");


            System.out.println(ALines[0]);
            System.out.println(ALines[1]);
            System.out.println(ALines[2]);
            System.out.println(ALines[3]);
            System.out.println(ALines[4]);
            System.out.println(ALines[5]);
            System.out.println(ALines[6]);


        } catch (IOException e) {
            e.printStackTrace();
        } 
}

【问题讨论】:

  • 欢迎,试着多解释一下你的尝试,而不是转储代码。虽然它相当简单 - 所以我还是投了赞成票
  • @clancer 很公平。我现在会做更多的事情。谢谢!

标签: java parsing text-parsing string-parsing


【解决方案1】:

试试这个

        ArrayList<String> listForCard1 = new ArrayList<String>();
    Integer selected_card = 1;

    BufferedReader br = null;   
    try {

        String line;

        br = new BufferedReader(new FileReader("MyText.txt"));
        Integer card = 1;
        while ((line = br.readLine()) != null) {
            if (line.contains("##########")) {
                if ( card == selected_card) {
                   listForCard1.add(br.readLine());
                   listForCard1.add(br.readLine());
                   listForCard1.add(br.readLine());
                   break;
                } else {
                   card++;
                }
            }

        }
        System.out.println("Done");
        for (String s : listForCard1) {
            System.out.println(s);
        }

    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            if (br != null)
                br.close();

        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }

通过设置 selected_card 来选择卡片。我们计算看到的##### 数量,当我们看到足够多的时候,我们读出了卡片并停止读取文件。然后从数组列表中打印出来

【讨论】:

  • 问题。无法保存文件。我想保留格式。它不是逐行保留卡片
  • 这个具体代码不是修改文件,你指的是什么?以后是否需要将 listForCard1 中的信息写回 MyText.txt 文件?
  • 我想通了。除了它非常低效。现在我这样做了
  • 如果你坚持固定的行大小,你可以使用随机访问文件直接跳到卡片stackoverflow.com/questions/9769874/…
  • 我需要转到每张卡片并在出现提示时打印该特定卡片。我希望根据 ("##########") 的拆分来拆分文件。我将在几秒钟内完成我的新代码。
猜你喜欢
  • 1970-01-01
  • 2021-10-01
  • 1970-01-01
  • 2019-03-11
  • 2016-01-19
  • 1970-01-01
  • 1970-01-01
  • 2012-10-22
  • 1970-01-01
相关资源
最近更新 更多