【问题标题】:How to read only relevant information from a file and ignore everything else?如何从文件中仅读取相关信息而忽略其他所有信息?
【发布时间】:2011-10-05 22:23:17
【问题描述】:

有人请编辑我的标题,让这个问题更清楚。

使用示例更容易展示:

myfile.txt 的内容:

10/05/2011: 10
10/05/2011: 45.4
10/05/2011: 12.1

我想使用 BufferedReader 读取日期(10、45.4、12.1)之后的数字并存储在列表中。我该怎么做?我现在正在使用 readLine() 方法来读取我的数据,但会读取整行。我不想在我的列表中存储日期,只是数字。有可能吗?

【问题讨论】:

标签: java io


【解决方案1】:

当然可以,尽管您必须先阅读整行内容,但一旦完成,您可以编写一个简单的正则表达式来选择您想要的数字。

或者,由于数字总是在“:”之后,这也可以工作

String[] parts = myReadLine.split(":");
String numbers = parts[1];

【讨论】:

  • 你能举个例子来说明如何做到这一点吗?抱歉,我在 Theoretical Comp Sci 课程之外没有太多使用 Reg 表达式的经验。
  • @Blue Pony Inc 是的,您可以使用提供的那个,这是最简单的方法。
【解决方案2】:

类似:

String number = br.readLine().split(":")[1];

...只需添加适当的错误检查...

【讨论】:

  • 或者,如果每一行都以日期开头,则可以使用substring(12)
  • 是的,只要确保日期部分始终为 12 个字符 (01/05/2011: ) 并且永远不要像 1/5/2011
【解决方案3】:

我无法编辑您的帖子,因为我没有足够高的权限,但是这个过程称为解析。

算法是

while(!EOF)
{
    //read until ':'
    //put chars after ':' into a string(or char[]) until you reach a \n
}

【讨论】:

    【解决方案4】:

    您可以使用字符串类的subString 方法来获取该行所需的部分。

    例如。

    string line = readline()...;
    
    string number = line.substring(12,14);
    

    或者你可以获取 ':' 的索引并将该索引用作子字符串方法的第一个参数。

    int i = line.indexOf(": ");
    string number = line.substring(i, i+2);
    

    【讨论】:

      【解决方案5】:

      检查Scanner,很容易。您可以使用 hasNext(String pattern) 方法指定一个模式来读取您需要的内容。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-08-09
        • 2014-05-27
        • 2019-12-29
        • 2013-06-28
        • 1970-01-01
        • 2012-07-20
        • 2016-08-30
        相关资源
        最近更新 更多