JAVA 根据指定目录:C:\Users\n\Desktop\地铁发票获取所有文件名称。然后使用正则表达式提取出文件名字中数字部分。注意,数字带有小数点。 然后封装成集合对象。对象中两个属性:文件名称,金额。怎么写

简介 需求:JAVA根据指定目录:C:\Users\n\Desktop\地铁发票这个文件夹中获取所有文件名称。然后使用正则表达式提取出文件名字中数字部分。注意,数字带有小数点。然后封装成集合对象。对象中两个属性:文件名称,金额,同时计算出总额。怎么写?要实现你的需求,可以按照以下步骤进行:遍历指定目录:使用File类获取该目录下所有文件。使用正则表达式提取文件名称中的数字部分:正则表达式可以提取文件名中

🔔🔔🔔好消息!好消息!🔔🔔🔔

有需要的朋友👉:联系凯哥 微信号 kaigejava2022

需求:
JAVA 根据指定目录:C:\Users\n\Desktop\地铁发票 这个文件夹中获取所有文件名称。然后使用正则表达式提取出文件名字中数字部分。注意,数字带有小数点。 然后封装成集合对象。对象中两个属性:文件名称,金额,同时计算出总额。怎么写 ?


要实现你的需求,可以按照以下步骤进行:

  1. 遍历指定目录:使用 File 类获取该目录下所有文件。

  2. 使用正则表达式提取文件名称中的数字部分:正则表达式可以提取文件名中的金额(数字和小数点)。

  3. 封装成对象:创建一个对象存储文件名和提取出的金额。

  4. 将对象添加到集合中:使用 List 或其他集合类型来存储这些对象。

下面是完整的代码示例:

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class FileNameExtractor {

    // 定义一个类来存储文件名和金额
    public static class FileAmount {
        private String fileName;
        private double amount;

        public FileAmount(String fileName, double amount) {
            this.fileName = fileName;
            this.amount = amount;
        }

        public String getFileName() {
            return fileName;
        }

        public double getAmount() {
            return amount;
        }

        @Override
        public String toString() {
            return "FileName: " + fileName + ", Amount: " + amount;
        }
    }

    public static void main(String[] args) {
        // 目录路径
        String directoryPath = "C:\\Users\\n\\Desktop\\地铁发票";

        // 获取指定目录下的所有文件
        File directory = new File(directoryPath);
        File[] files = directory.listFiles();

        if (files != null) {
            // 存储文件名和金额的集合
            List<FileAmount> fileAmounts = new ArrayList<>();

            // 总金额的累加器
            double totalAmount = 0;

            // 正则表达式匹配数字(包括小数点)
            Pattern pattern = Pattern.compile("\\d+(\\.\\d+)?");

            for (File file : files) {
                if (file.isFile()) {
                    String fileName = file.getName();
                    Matcher matcher = pattern.matcher(fileName);

                    // 如果匹配到数字
                    if (matcher.find()) {
                        String numberStr = matcher.group();
                        try {
                            // 将字符串转换为数字
                            double amount = Double.parseDouble(numberStr);
                            // 创建FileAmount对象并加入集合
                            fileAmounts.add(new FileAmount(fileName, amount));
                            // 累加金额
                            totalAmount += amount;
                        } catch (NumberFormatException e) {
                            System.out.println("无法解析金额:" + numberStr);
                        }
                    }
                }
            }

            // 输出所有提取的结果
            for (FileAmount fileAmount : fileAmounts) {
                System.out.println(fileAmount);
            }

            // 输出总金额
            System.out.println("Total Amount: " + totalAmount);
        } else {
            System.out.println("目录不存在或无法访问");
        }
    }
}
  • totalAmount:我们新增了一个 double 类型的变量 totalAmount,用来累加所有提取出来的金额。

  • 金额累加:在每次成功解析出金额并创建 FileAmount 对象后,我们就把金额加到 totalAmount 上。

  • 输出总金额:在输出文件名和金额后,程序会额外输出总金额。

示例输出:

假设文件名为:

  • 发票123.45.pdf

  • 发票678.90.txt

程序的输出会是:

yaml复制代码FileName: 发票123.45.pdf, Amount: 123.45FileName: 发票678.90.txt, Amount: 678.90Total Amount: 802.35


TopTop