Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:如何在一个包含3列的CSV文件中连接3个线性阵列_Java_Arrays_Csv - Fatal编程技术网

Java:如何在一个包含3列的CSV文件中连接3个线性阵列

Java:如何在一个包含3列的CSV文件中连接3个线性阵列,java,arrays,csv,Java,Arrays,Csv,我正在用木偶师抓取网络内容。我设法将我想要的内容刮到三个单独的数组中,每个数组的元素数相同。我需要的是以这样一种方式连接三个线性阵列,使每个线性阵列成为不同的列 我将三个数组放在一个对象中,日志输出如下: { header1: [ ' string1 ', ' string2 ', ' string3 '], header2: [ ' string4 ', ' string5 ',

我正在用木偶师抓取网络内容。我设法将我想要的内容刮到三个单独的数组中,每个数组的元素数相同。我需要的是以这样一种方式连接三个线性阵列,使每个线性阵列成为不同的列

我将三个数组放在一个对象中,日志输出如下:

    { header1: 
       [ ' string1 ',
         ' string2 ',
         ' string3 '],

      header2: 
       [ ' string4 ',
         ' string5 ',
         ' string6 '], 

      header3: 
       [ ' string7 ',
         ' string8 ',
         ' string9 ']  
     }
JSON.stringify将其更改为:

我需要的是如下所示的CSV文件:

我相信这非常容易,但我显然是个初学者。我发现的大多数信息都涉及到将数组连接在一起,或者使用适当的表语法解析JSON对象,这与我这里的内容不太相符。谢谢

我需要的是以这样一种方式连接三个线性阵列,使每个线性阵列成为不同的列

步骤1

定义完成工作的方法,例如

public String arraysToString(String[] first, String[]... arrays) {
    return "Not implemented yet!";
}
该方法将采用数量可变的
String[]
数组

步骤2

定义一些代码来测试方法,例如

@Test // No clue what this is? Google it - "junit", "tdd", "assertions" ...!
public void testArraysToString() {
    String[] h1 = { "header1", "string1", "string2", "string3" };
    String[] h2 = { "header2", "string4", "string5", "string6" };
    String[] h3 = { "header3", "string7", "string8", "string9" };
    String result = arraysToString(h1, h2, h3);
    String expected = "header1,header2,header3\nstring1,string4,string7\nstring2,string5,string8\nstring3,string6,string9\n";
    org.junit.Assert.assertEquals(expected, result);
    System.out.println(result);
}
步骤3

尝试编写一些代码,直到您的第一个测试用例成功

public String arraysToString(String[] first, String[]... arrays) {
    for (String[] cur : arrays) {
        if (cur.length != first.length) {
            throw new IllegalArgumentException("Precondition failed. Arrays do not have the same length.");
        }
    }
    StringBuilder strb = new StringBuilder();
    for (int i = 0; i < first.length; i++) {
        strb.append(first[i]);
        for (String[] array : arrays) {
            strb.append(",");
            strb.append(array[i]);
        }
        strb.append("\n");
    }
    return strb.toString();
}
注意:如果您的实现与预期不符,您现在可以在stackoverflow.com上发布问题。只需将测试代码、堆栈跟踪和简短描述粘贴在一起

步骤4


添加更多测试用例并增强实现

我找到了一种方法。首先,我从3个数组构建了一个JSON对象:

for(var JSONobj = [], i = 0; i < array1.length; ++i) 
    JSONobj.push({ array1: array1[i], array2: array2[i], array3: array3[i]})

您可以将其放在
映射中
:每个标题将是
,每个
将表示
3元素数组
。在这之后,您只需将键作为第一行写入,然后(每次为每个键)写入值@jschnasse您是对的。完成。您想用
const
实现什么?请参阅:。总的来说,您的代码不是很自解释的,因此很难帮助其他人。你真的应该添加一些关于你正在使用的库的信息,等等。对不起,我是一个绝对的初学者。我需要的是获取三个单独的数组并构建一个CSV表,其中每个数组是一列。因此,我基本上将3个独立的一维数组(“array1”、“array2”、“array3”)合并为一个对象数组JSON object(“JSONobj”)。然后我将其转换为CSV文件并将其导出。json2csv是一个将任何JSON对象转换为CSV格式的库。fs lib用于编写CSV文件。
public String arraysToString(String[] first, String[]... arrays) {
    for (String[] cur : arrays) {
        if (cur.length != first.length) {
            throw new IllegalArgumentException("Precondition failed. Arrays do not have the same length.");
        }
    }
    StringBuilder strb = new StringBuilder();
    for (int i = 0; i < first.length; i++) {
        strb.append(first[i]);
        for (String[] array : arrays) {
            strb.append(",");
            strb.append(array[i]);
        }
        strb.append("\n");
    }
    return strb.toString();
}
header1,header2,header3
string1,string4,string7
string2,string5,string8
string3,string6,string9
for(var JSONobj = [], i = 0; i < array1.length; ++i) 
    JSONobj.push({ array1: array1[i], array2: array2[i], array3: array3[i]})
const Json2csvParser = require('json2csv').Parser;
const fields = ['array1', 'array2', 'array3'];


const json2csvParser = new Json2csvParser({ fields });
const csv = json2csvParser.parse(JSONobj);

console.log(csv);

var fs = require('fs');

fs.writeFile('name.csv', csv, 'utf8', function(err) {
  if (err) {
    console.log('Some error occured - file either not saved or corrupted file saved.');
  } else {
    console.log('It\'s saved!');
  }
});