JAVA 根据指定目录:C:\Users\n\Desktop\地铁发票获取所有文件名称。然后使用正则表达式提取出文件名字中数字部分。注意,数字带有小数点。 然后封装成集合对象。对象中两个属性:文件名称,金额。怎么写
- 工作小总结&小工具类
- 时间:2025-01-15 23:13
- 699人已阅读
简介
需求:JAVA根据指定目录:C:\Users\n\Desktop\地铁发票这个文件夹中获取所有文件名称。然后使用正则表达式提取出文件名字中数字部分。注意,数字带有小数点。然后封装成集合对象。对象中两个属性:文件名称,金额,同时计算出总额。怎么写?要实现你的需求,可以按照以下步骤进行:遍历指定目录:使用File类获取该目录下所有文件。使用正则表达式提取文件名称中的数字部分:正则表达式可以提取文件名中
🔔🔔🔔好消息!好消息!🔔🔔🔔
有需要的朋友👉:联系凯哥
需求:
JAVA 根据指定目录:C:\Users\n\Desktop\地铁发票 这个文件夹中获取所有文件名称。然后使用正则表达式提取出文件名字中数字部分。注意,数字带有小数点。
然后封装成集合对象。对象中两个属性:文件名称,金额,同时计算出总额。怎么写 ?
要实现你的需求,可以按照以下步骤进行:
遍历指定目录:使用
File类获取该目录下所有文件。使用正则表达式提取文件名称中的数字部分:正则表达式可以提取文件名中的金额(数字和小数点)。
封装成对象:创建一个对象存储文件名和提取出的金额。
将对象添加到集合中:使用
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
上一篇: Linux 软连映射问题
下一篇: 分库分表用同一算法会有什么问题