首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java:如何在一个具有3列的CSV文件中连接3个线性数组

Java:如何在一个具有3列的CSV文件中连接3个线性数组
EN

Stack Overflow用户
提问于 2018-10-04 22:30:46
回答 2查看 90关注 0票数 1

我正在使用puppeteer抓取web内容。我设法将我想要的内容收集到三个独立的数组中,每个数组的元素数都相同。我需要的是以这样的方式连接三个线性阵列,使每个线性阵列成为不同的列。

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

代码语言:javascript
复制
    { header1: 
       [ ' string1 ',
         ' string2 ',
         ' string3 '],

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

      header3: 
       [ ' string7 ',
         ' string8 ',
         ' string9 ']  
     }

JSON.stringify会将其更改为:

'{"header1":“string1 ",”string2 ",“string3 ","header2":"string4","string5","string6","header3":"string7","string8","string9"}‘

我需要的是这样的CSV文件:

header1,主板,header2,主板,header3 string1,主板,string4,主板,string7 string2,主板,string5,主板,string8 string3,主板,string6,主板,string9

我相信这是非常简单的,但我显然是一个初学者。我发现的大多数信息都涉及一个接一个的数组,或者用正确的表语法解析JSON对象,这与我这里的内容不太相符。谢谢。

EN

回答 2

Stack Overflow用户

发布于 2018-10-05 16:59:06

我需要的是将三个线性数组连接起来,使得每个线性数组变成不同的列。,

,the,in,the,in,the,the,in,in。,我需要的是连接这三个线性数组,使每个线性数组变成不同的列。

步骤1

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

代码语言:javascript
复制
public String arraysToString(String[] first, String[]... arrays) {
    return "Not implemented yet!";
}

该方法将接受数量可变的String[]数组。

步骤2

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

代码语言:javascript
复制
@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

试着写一些代码,直到你的第一个测试用例成功。

代码语言:javascript
复制
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();
}

这将打印出来

代码语言:javascript
复制
header1,header2,header3
string1,string4,string7
string2,string5,string8
string3,string6,string9

注意:如果您的实现没有按照预期运行,那么您现在可以在stackoverflow.com上发布一个问题。只需将测试代码和代码与堆栈跟踪和简短描述粘贴在一起即可。

步骤4

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

票数 1
EN

Stack Overflow用户

发布于 2018-10-06 03:27:13

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

代码语言:javascript
复制
for(var JSONobj = [], i = 0; i < array1.length; ++i) 
    JSONobj.push({ array1: array1[i], array2: array2[i], array3: array3[i]})

然后,我使用了一些我找到的代码将其转换为CSV并导出。我需要json2csv和fs库。

代码语言:javascript
复制
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!');
  }
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52649281

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档