java - 如何用Java从文本文件中读取格式化数据

标签 java arrays file java.util.scanner

所以在过去的一周里,我完成了这项作业,而我在这项作业中要做的事情之一就是从文本文件中读取格式化数据。通过格式化我的意思是这样的:

{
    Marsha      1234     Florida   1268
    Jane        1523     Texas     4456
    Mark        7253     Georgia   1234
}

(注意:这只是一个示例。不是我作业中的实际数据。)

现在我一直在尝试自己解决这个问题。我尝试将每一行作为字符串读取,并使用 .substring() 获取所述字符串的某些部分并将其放入数组中,然后从数组中获取该字符串的索引并打印它到屏幕上。现在我已经尝试了这个想法的几种不同变体,但它不起作用。它要么以错误结束,要么以奇怪的方式输出数据。现在作业明天就要交了,我不知道该怎么办。如果有人可以就此事向我提供一些帮助,我将不胜感激。

最佳答案

对于您给出的示例,使用正则表达式模式 \s+ 分割行会起作用:

String s = "Marsha      1234     Florida   1268";
s.split("\\s+");

生成一个包含 4 个元素“Marsha”、“1234”、“Florida”和“1268”的数组。

我使用的模式匹配一​​个或多个空白字符 - 请参阅 The JavaDocs of Pattern了解详细信息和其他选项。

<小时/>

另一种方法是定义您的线路作为一个整体需要匹配的模式,并捕获您感兴趣的组:

String s = "Marsha      1234     Florida   1268";

Pattern pattern = Pattern.compile("(\\w+)\\s+(\\d+)\\s+(\\w+)\\s+(\\d+)");
Matcher matcher = pattern.matcher(s);

if (!matcher.matches())
    throw new IllegalArgumentException("line does not match the expected pattern"); //or do whatever else is appropriate for your use case

String name = matcher.group(1);
String id = matcher.group(2);
String state = matcher.group(3);
String whatever = matcher.group(4);

此模式要求第二组和第四组仅包含数字。

但请注意,如果您的数据也可以包含空格,这两种方法都会失败 - 在这种情况下您需要不同的模式。

关于java - 如何用Java从文本文件中读取格式化数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52755983/

相关文章:

c++ - 在 C++ 中截断文件

java - 如何使用designgridlayout在页面中的两类数据之间插入垂直JSeperator?

java - 公共(public)执行 : Executing a program on the system PATH?

java - 对字符串数组执行乘法操作

c - 打印从文件加载的字符串 (char*),没有转义的特殊序列(如\n)

android - 空目录不在android中删除

java - 使用 Scanner 读取文本文件并计算每次出现的字母

java - 如何检查jsonobject中对象的返回类型

php - 如何在 PHP 中构建键组合数组

C++ 在自定义类/结构数组的构造函数中获取数组键?