【问题标题】:What is the best way to parse a line using Java?使用 Java 解析行的最佳方法是什么?
【发布时间】:2014-11-12 03:06:12
【问题描述】:

我正在尝试编写一个小型 Java 应用程序,它的部分工作是读取、写入和解析文本文件中的行。不过,我的问题是从文本文件中取出一行,读取它,然后将其分成几部分。例如,示例行是:

Tuesday, 11/11/14 10:30:32: 3.93

我希望我的程序能够查看并填写例如 string day = "tuesday"value = 3.93

FileReader fileReader = new FileReader(itemValue);
BufferedReader bufferedReader = new BufferedReader(fileReader);
StringBuffer stringBuffer = new StringBuffer();
String line;
while ((line = bufferedReader.readLine()) != null) {
    stringBuffer.append(line + "\n");
    int[] value;

}
fileReader.close();
System.out.println("Contents of file:");
System.out.println(stringBuffer.toString());

这是我目前拥有的代码 - 它将解析我的文件并逐行打印到控制台中,但我真的不知道如何实际处理该行。我尝试使用 bufferedReader.readLine 作为包含该行的变量,但这似乎不是答案。我对 Java 非常陌生,这是我编程中的一大障碍,所以如果有人能指出我的解决方案,那就太棒了。提前致谢! :)

编辑:我所有的数据看起来都一模一样,这是其余的。

Tuesday, 11/11/14 10:29:23: 4.48
Tuesday, 11/11/14 10:29:27: 5.0
Tuesday, 11/11/14 10:29:39: 5.95
Tuesday, 11/11/14 10:29:46: 6.0
Tuesday, 11/11/14 18:07:25: 4.0
Tuesday, 11/11/14 18:07:27: 4.5
Tuesday, 11/11/14 18:07:33: 5.0
Tuesday, 11/11/14 18:07:39: 5.9
Tuesday, 11/11/14 18:07:51: 20.0

【问题讨论】:

  • 有大量可能的答案,这取决于你的测试数据是什么样的以及它有多一致。请向我们展示您的测试数据的一个小例子(多于一行)。
  • 我添加了更多数据 - 格式完全相同。说到格式,我也是这个网站的新手,显然我弄坏了一些东西——它们并不都在同一行,每一天/日期/时间/双精度都应该在自己的行上。
  • 没关系 - 我已经修好了。
  • 目前还不清楚您要完成什么。请为提供的输入提供所需输出的示例。另外,为什么值被初始化,然后从未使用过。我假设这只是您在遇到此障碍之前停下来的地方,但是有关您想在那里做什么的更多背景信息将有助于我们提供帮助。
  • 使用line.split("\\s+")。这里\\s+ 是“1 个或多个空白字符”的模式

标签: java file io


【解决方案1】:

您可以尝试使用分隔符将每一行按空格分开。

String line;
while ((line = bufferedReader.readLine()) != null) {
    String values[] = line.split("\\s+");

}

这为您处理行中的每一位数据提供了一些起点。正如 Jason 在 cmets 中指出的那样,它可以有很大的不同,具体取决于实现。

在这种情况下,例如,您可以将每个 values[] 中的最后一项解析为双精度。这取决于你。

【讨论】:

    【解决方案2】:

    解析此类数据的两种最流行的方法是String.split(),以及使用正则表达式。

    使用String.split(),您可以执行以下操作:

    while ((line = bufferedReader.readLine()) != null) {
        String[] parts = line.split("\\s+");
        // now each part of the input line (separated by whitespace) is in a different element of the parts array
    }
    

    如果您选择使用正则表达式,并且想要开头和结尾部分,您可以尝试使用正则表达式,例如:

    ^(A-Za-z), .*? (0-9\.)$
    

    当然,执行它还需要其他代码。谷歌搜索“正则表达式”。

    【讨论】:

      猜你喜欢
      • 2010-10-28
      • 2019-09-16
      • 1970-01-01
      • 1970-01-01
      • 2010-09-14
      • 2011-11-30
      • 2020-06-28
      • 2012-07-28
      • 1970-01-01
      相关资源
      最近更新 更多