java - 不要在 csv 导入时在空间上拆分字符串
问题描述
摘要:只要我的 CSV 中有空格,我的代码就不会按预期工作。
嗨,我有点卡在一个自创的问题上。(我只是想学习,但用例是将 Excel 表格式化为我可以在另一个应用程序中导入的格式)
我有一个CSV如下:
EMPTY ;Column1;Column2;Column3;Column4
Line1 ; x; x; ;x
Line2 ; x; ; x;
(试图清理它以便更好地阅读)
结果是我的代码是一个包含以下内容的新文件:
Line1,Column1
Line1,Column2
Line1,Column4
Line2,Column1
Line2,Column3
这正是我想要的。
但是一旦我在导入文件中有空格,我就无法得到我需要的输出。
例如:此 csv 中的 Cloumn 1 而不是 Column1。
File i_file = new File("import.csv");
File e_file = new File("export.csv");
Scanner inputStream;
FileWriter fstream = new FileWriter(e_file, true);
BufferedWriter out = new BufferedWriter(fstream);
List<List<String>> lines = new ArrayList<>();
try{
inputStream = new Scanner(i_file);
while(inputStream.hasNext()){
String line= inputStream.next();
String[] values = line.split(";");
lines.add(Arrays.asList(values));
}
inputStream.close();
}
catch (FileNotFoundException e) {
e.printStackTrace();
}
int lineNo = 0;
for(List<String> line: lines)
{
int columnNo = 0;
for (String value: line)
{
// System.out.println("Line " + lineNo + " Column " + columnNo + ": " + value);
if (value.contentEquals("x"))
{
System.out.println((lines.get(lineNo)).get(0)+" is connected to "+(lines.get(0)).get(columnNo));
out.write((lines.get(lineNo)).get(0)+","+(lines.get(0)).get(columnNo));
out.newLine();
}
columnNo++;
}
lineNo++;
}
out.close();
希望这看起来不难看。
我在这里发现了一个类似的问题,他们提到要使用:
inputStream = new Scanner(i_file);
inputStream.useDelimiter(";");
while (inputStream.hasNext())
{
content = inputStream.next();
System.out.println(content);
}
有了这个,我无法将值添加到 2d 列表中。因为我还没有弄清楚如何区分不同的线条。我还讨论了一个使用数组而不是列表的解决方案,但我认为我应该使用列表,因为我现在不知道 csv 会有多大。
有什么简单的方法可以与 Column1 之类的空间或 "Column1" 之类的空间一起使用吗?如果没有,我应该研究什么来解决这个问题?
解决方案
谢谢皮科洛,
第一次尝试你的答案看起来很棒。
try {
inputStream = new Scanner(i_file);
inputStream.useDelimiter(Pattern.compile("[\\r\\n]+"));
while (inputStream.hasNext())
{
String line= inputStream.next();
String[] values = line.split(";");
lines.add(Arrays.asList(values));
// System.out.println(line);
}
System.out.println(lines);
}
如果我使用发布的代码,我会得到输出:
[[EMPTY, Column 1, Column2, Column3, Column4], [Line1, x, x, , x], [Line2, x, , x]]
看起来完全像我正在寻找的 2 维列表。
推荐阅读
- javascript - 为什么当我更改 componentDidMount 中的状态时我的组件没有重新渲染?
- ios - 这是IOS模拟器12.1和12.4的空列表。我怎样才能将它们安装回来?
- python - 从 SQLAlchemy 元数据在 MSSQL 和 Oracle 上创建对象,名称的大小写不同
- python-3.x - e 到 pi 给出 1.0,我无法理解其背后的原因。在理解基础科学方面需要帮助
- esp8266 - esp8266 1Mbyte (512kb spiffs) 丢失文件
- python - 如何选择具有日期时间索引和位置的两组年份?
- macos-catalina - 在 mac catalina 上启用 opcache,php 7.4 与 homebrew 一起安装
- c# - 提取所有具有 CAD 文件的外部链接
- string - 有没有一种简单的方法可以将 cset 打印输出转换为简单的逗号分隔列表?
- php - laravel 一次从不同的数据库中删除多条记录