java - 从文本文件中读取文本并与字段名称及其值逐行显示
问题描述
我有这个文本文件:
1 Juan García12-11-2016 Reparación caldera 110.50
2 Eva Blasco05-10-2016 Fuga de agua 200.00
3 Rosa Carreras23-01-2016 Cambio de filtro 0.75
我需要在控制台上这样显示它:
Code: 1, Client: Juan García, Date: 12-11-2016, Concept: Reparación caldera, Price: 110.50
我试过用正则表达式来做,但我通常会出错,我没有时间正确学习它
Pattern p = Pattern.compile(
"^([\\d.]+)\\s+(\\d+)\\s+([\\d.]+)\\s+(.+?)\\s+\\((\\d+)\\)(?:\\s+\\{([^{}]+))?"
);
Matcher m = p.matcher("");
Scanner sc = new Scanner(new File("C:\\Temp\\factura.txt"));
while (sc.hasNextLine())
{
String s = sc.nextLine();
if (m.reset(s).find())
{
System.out.printf("%s %8s %6s%n%s (%s) %s%n%n",
m.group(1), m.group(2), m.group(3), m.group(4), m.group(5),
m.start(6) != -1 ? m.group(6) : "");
}
}
我用正则表达式和子字符串尝试了一些东西,但我无法让它工作,我为此发疯了。
任何帮助表示赞赏。
解决方案
尝试这个。
public static void main(String[] args) {
String line="1 Juan García12-11-2016 Reparación caldera 110.50";
String amount=line.substring(line.lastIndexOf(' '),line.length());
String code=line.substring(0,line.indexOf(' '));
String remaining=line.substring(code.length(),line.lastIndexOf(' '));
//Juan García12-11-2016 Reparación caldera
remaining=remaining.trim();
Matcher matcher = Pattern.compile("\\d").matcher(remaining);
matcher.find();
int i = Integer.valueOf(matcher.group());
String name=remaining.substring(0,i);
remaining=remaining.substring(name.length(),remaining.length());
//12-11-2016 Reparación caldera
String date=remaining.split(" ")[0];
String concept=remaining.substring(date.length(),remaining.length());
concept=concept.trim();
System.out.printf("code: "+code+" client:"+name+" Date:"+date+" Concept: "+concept+" Price:"+amount);
}
推荐阅读
- c++ - 带有键的 std::map 作为具有三个 int 成员的结构
- html - HTML中有哪些不同的输入类型?
- docker - gitlab:带有 docker+machine 配置的运行器没有启动任何空闲实例?
- python - 当我使用 jupyter 在 pandas 中运行简单代码时出现错误
- python - Python 项目只采用一开始就初始化的环境变量
- java - 如何在 Spring Security 中使用哈希指定内容安全策略
- javascript - 无法读取未定义的属性“命令”(discord.js)
- c# - 如何在输入系统统一中删除输入绑定
- jenkins - 在 Jenkins 管道内的 shell 脚本中使用 grep 和变量
- javascript - 使用 Jquery 更改引导警报类