作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以在过去的一周里,我完成了这项作业,而我在这项作业中要做的事情之一就是从文本文件中读取格式化数据。通过格式化我的意思是这样的:
{
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/
我是一名优秀的程序员,十分优秀!