gpt4 book ai didi

java - 不要在 csv 导入时在空间上拆分字符串

转载 作者:行者123 更新时间:2023-12-01 21:10:43 25 4
gpt4 key购买 nike

摘要:一旦我的 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);
}

这样我无法将值添加到二维列表中。因为我还没弄清楚如何区分不同的线。我还提出了一个使用数组而不是列表的解决方案,但是我认为我应该使用列表,因为我现在不知道 csv 会有多大。

是否有任何简单的方法可以与像 Column1 这样的 spacec 或类似“Column1”的东西一起使用?如果没有,我应该研究什么来解决这个问题?

最佳答案

谢谢peekolo,

第一次尝试你的答案看起来很棒。

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]]

看起来与我正在寻找的二维列表一模一样。

关于java - 不要在 csv 导入时在空间上拆分字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58902179/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com