0

我的用例是将 Java POJO 转换为字符串,以便可以将其传递以发布到 AWS Kinesis Firehose Stream。

我正在写这个convertToString(),但我无法找到逃避分隔符的正确方法。

public <T> List<String> convertToString(List<T> objectList, Class<T> tClass) {

        List<String> stringList = new ArrayList<>();
        char delimiter = ',';
        char escape = '\\';

        CsvMapper mapper = new CsvMapper();
        CsvSchema schema = mapper.schemaFor(tClass);

        for (T object : objectList ) {
            try{
                stringList.add(mapper.writer(schema.withColumnSeparator(delimiter).withEscapeChar(escape))
                        .writeValueAsString(object));
            } catch (JsonProcessingException e) {
                System.out.println("Exception : " + e);
            }
        }

        return stringList;
}

输入:SuperHero flash = new SuperHero(1, "Flash", "Barry , Allen", "DC");

预期输出:1,Flash,“Barry \,Allen”,DC

我得到的输出:1,Flash,“Barry,Allen”,DC

有人可以指出我做错了什么吗?

4

1 回答 1

1

您的输出是正确的,在 CSV 中,当您用双引号将对象或元素括起来时,它按原样写入,因此“Flash”不带引号写入,“Barry,Allen”在输出中用引号写入,因此分隔符是已经转义,不需要用反斜杠转义。

编辑/更新

在阅读了github上提供的文档后,以下行显示生成器仅使用双引号,转义仅用于解析。

escapeChar (int) [默认值:-1 表示“无”]:字符,如果有的话,用于转义值。最常见的定义为反斜杠 ('\')。仅由解析器使用;生成器仅使用引号,包括将引号加倍以指示引号字符本身。

于 2017-01-05T17:10:08.007 回答