使用Java解析一行的最佳方法是什么?

时间:2014-11-12 03:06:12

标签: java file io

我正在尝试编写一个小型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

2 个答案:

答案 0 :(得分:2)

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

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

}

这为您提供了一些处理行中每一位数据的起点。正如Jason在评论中指出的那样,它可以根据实施情况而有很大差异。

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

答案 1 :(得分:1)

解析此类数据的两种最流行的方法是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\.)$

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