gpt4 book ai didi

java - OpenCSV - CsvReaderNullFieldIndicator 似乎没有什么区别

转载 作者:行者123 更新时间:2023-12-02 07:14:34 25 4
gpt4 key购买 nike

我正在使用opencsv创建 CsvToBean像这样:

CsvToBean<AccountBean> csvToBean = new CsvToBeanBuilder<AccountBean>(new InputStreamReader(inputStream))
.withFieldAsNull(CSVReaderNullFieldIndicator.NEITHER)
.withType(AccountBean.class)
.build();

这是我的 AccountBean :

public class AccountBean extends BeanBase<Account>
{

@CsvBindByName(column = "Id", required = true)
public String salesforceId;

@CsvBindByName(column = "OwnerId", required = true)
public String ownerId;

@CsvBindByName(column = "Name", required = true)
public String name;

// billing address
@CsvBindByName(column = "BillingStreet")
String billingStreet;
@CsvBindByName(column = "BillingCity")
String billingCity;
@CsvBindByName(column = "BillingState")
String billingState;
@CsvBindByName(column = "BillingPostalCode")
String billingPostcode;
@CsvBindByName(column = "BillingCountry")
String billingCountry;

}

问题在于地址字段 - 如果有空白字段,则它们始终为空,无论 CSVReaderNullFieldIndicator 是哪个我传递给 .withFieldAsNull() 的值.

我的 csv 文件有双引号来表示空字段,因此使用 CSVReaderNullFieldIndicator.NEITHER (无论如何都是默认值)应该生成一个空字符串。

这会导致问题,因为我将空值保存到数据存储区,然后又导致 NullPointerExceptions。

我做错了什么吗?

最佳答案

我正在尝试你的方法,并且我有同样的行为。由于这个库是开源的,我正在挖掘它发生的原因。

  • 内部CsvToBean类(class)你有一个CSVReader负责访问要读取的数据。
  • 内部CSVReader您有一个 CSVParser,它负责获取单个字符串并根据分隔符、引号和转义字符将其解析为元素。
  • CSVParser包含 CSVReaderNullFieldIndicator 的成员(枚举)用于告诉 CSVParser什么可以视为 null。

当您在代码中调用 build() 时 CsvToBean , CSVReaderCSVParser根据您传递给 CsvToBeanBuilder 的信息进行实例化.

当您调用parse()CSVReader将遍历您的 CSV 文件,并为每一行调用 CSVParser 。根据您的分隔符,解析器将返回一个字符串值数组。此时,基于 NullFieldIndicator 的 CSVParser 会考虑将字符串保留为空或将其设置为 null。最后,如果您的 NullFieldIndicator 属性为 NEITHER例如,考虑的行是“one”;“”,则解析器返回的字符串数组将是 [one,""] 或 [one, null] if CSVReaderNullFieldIndicatorBOTHEMPTY_QUOTES .

在此阶段之后,解析的行将映射到 AccountBean字段。决定字段是否为空 StringUtils.isNotBlank()已使用。

结论:无论你传递给withFieldAsNull()什么,因为“”或null被认为是 false通过StringUtils.isNotBlank() ,因此该字段将为空。

您可以询问开发人员此行为是否是预期的行为。也许他有原因,或者只是一个错误。

关于java - OpenCSV - CsvReaderNullFieldIndicator 似乎没有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42856200/

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