Java 从文本文件中读取文本,并用字段名称及其值逐行显示

Java 从文本文件中读取文本,并用字段名称及其值逐行显示,java,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

我有这个文本文件:

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);

}

每行字段之间是否有明确的分隔符?如果是这样的话,
String.split()
可能在这里最合适。可能每个字段之间的空格以及名称和日期都在一起,但可能是字母后面的数字。除了没有分隔符之外,它只是一个文本文件。我开始发现String.split()可能会起作用。谢谢:多姆,我爱你!!。非常感谢:Dkool,我也爱你:)但是有一些错误,p.e:客户:Juan Garc�a-->1@IvánIvanovMarín看起来像一些UTF-8角色。你能把这句话贴在这里吗