Java实现字符串拆分三字段并导出至CSV的问题求助
解决字符串拆分匹配并写入CSV的问题
我来帮你搞定这个问题!你的代码现在没法正常运行,核心原因是错误地用整个列表和输入字符串做相等比较,咱们一步步来修复:
一、原代码的问题分析
你写的unit_list.equals(input)和quantity_list.equals(input)完全不对——这是在把整个列表和单个字符串做相等判断,类型和内容都不匹配,自然永远不会返回true。咱们需要改成检查输入字符串里的子元素是否存在于列表中。
二、完整实现方案
下面是可以直接运行的代码,包含字符串拆分、列表匹配、CSV写入全流程:
1. 核心思路
- 把输入字符串按空格拆分,分离出数量、单位、物品名(支持物品名带空格的情况)
- 用
contains()方法验证数量和单位是否在目标列表里 - 用Java原生的
FileWriter把结果写入CSV文件
2. 完整代码
import java.io.FileWriter; import java.io.IOException; import java.util.Arrays; import java.util.List; public class ItemCSVExporter { public static void main(String[] args) { // 定义匹配列表 List<String> unitList = Arrays.asList("g", "kg", "ml", "l"); List<String> quantityList = Arrays.asList("Full", "Quarter", "Half", "3 Quarter", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0"); String input = "1 kg potatoes"; // 拆分输入字符串:处理物品名带空格的情况 String[] inputParts = input.split(" "); String quantity = inputParts[0]; String unit = inputParts[1]; // 拼接从第2个索引开始的所有部分作为物品名 String item = String.join(" ", Arrays.copyOfRange(inputParts, 2, inputParts.length)); // 验证数量和单位是否合法 boolean isQuantityValid = quantityList.contains(quantity); boolean isUnitValid = unitList.contains(unit); if (isQuantityValid && isUnitValid) { // 写入CSV文件 try (FileWriter csvWriter = new FileWriter("item_output.csv")) { // 写入表头 csvWriter.append("Quantity,Unit,Item\n"); // 写入数据行 csvWriter.append(String.format("%s,%s,%s\n", quantity, unit, item)); System.out.println("CSV文件已成功生成!"); } catch (IOException e) { System.err.println("写入CSV时出错:" + e.getMessage()); e.printStackTrace(); } } else { // 验证不通过时的提示 if (!isQuantityValid) { System.out.println("无效的数量:" + quantity); } if (!isUnitValid) { System.out.println("无效的单位:" + unit); } } } }
3. 运行结果
生成的item_output.csv内容如下:
Quantity,Unit,Item 1,kg,potatoes
4. 扩展说明
如果你的输入里物品名包含空格(比如"2 kg sweet potatoes"),代码依然能正常工作——因为我们用String.join把拆分后的剩余部分重新拼接成了完整的物品名,不用担心拆分错误。
内容的提问来源于stack exchange,提问作者Lily
相关产品推荐
相关产品推荐

