作业说:当处理已知格式的字符串时,使用 split() 方法很方便。它在分隔符处拆分原始字符串并返回一个字符串数组。例如,要分割我们的行,我们需要从文件中逐行调用带有 System.lineSeparator() 参数的方法。此函数返回字符串的结尾:
String[] lines = fileContents.split(System.lineSeparator());
现在我们有一组字符串。仍然需要使用相同的方法拆卸它们中的每一个。除法将在符号“,”上进行:
String[] lineContents = line.split(",");
这将允许您引用字符串中的特定值。
现在问题本身:
如何在我的代码中使用所有这些来访问xxx.csv文件中的值以进一步使用它们(例如,获取 sum_of_one 列的总和)?:
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
public class Main {
public static void main(String[] args) {
System.out.println(readFileContents("xxx.csv"));
}
private static String readFileContents(String filename){
Path filePath = Paths.get(filename);
try {
return Files.readString(filePath);
} catch (IOException e) {
System.out.println("Невозможно прочитать файл. Возможно, файл не находится в нужной директории.");
}
}
}
xxx.csv
item_name,is_expense,quantity,sum_of_one
Коньки,TRUE,50,2000
Новогодняя ёлка,TRUE,1,100000
Ларёк с кофе,TRUE,3,50000
Аренда коньков,FALSE,1000,180
Продажа билетов,FALSE,3500,300
Продажа кофе,FALSE,2421,150
如果您不需要爬入 OOP,我将提供此选项。
每行的值都是在循环中获得的
for。在此示例имя=значиние中,显示所有对。您在没有考虑解决方案的情况下完成任务。您的任务不是将文本文件转换为字符串变量。那么问题来了:为什么要编写最终会导致你走向死胡同的代码?毕竟,最初很明显,您不需要生成的 String 类型变量,用它做任何事情要么是不可能的,要么是极其困难的。
首先,我们需要将 csv 文件转换为便于我们在 OOP 世界中使用的格式。在我看来,任何“表”数据总是可以绘制到 Map 中,其中键是列的名称,值是该表特定行的值。任何csv都可以看成表格数据:有表头,有分隔符,其实就是表格的竖线等。所以我们需要一些能够读取我们的 csv 并将其带到 Map 的东西。这是第一步。现在我们面临另一个问题:地图在使用的普遍性方面是一个很好的解决方案。但是在强类型和 OOP 的世界里,处理这样的数据仍然相当困难,所以我想要一个模型类来接受来自 Map 的数据,它的字段将是强类型的,因此很容易使用此类的实例。因此,下一步是创建模型类。最后一个是将 Map 转换为此类的对象。
现在实现: