【问题标题】:how to eliminate text delimiter in excel using java如何使用java消除excel中的文本分隔符
【发布时间】:2015-01-01 12:22:23
【问题描述】:

我的 csv 文件包含管道分隔符,数据在 csv 中如下所示,

ID| Name|   details
 1|   xx|     {
                "user":"xx",
                 "email":"xxx@xxx.in"
         }

如果我在记事本中编辑 csv,值显示为,

 1|xx|"{
""user"":""z"",
""email"":""e""
}"|"

在我的程序中,我根据管道分隔符拆分值。问题是,当我从 csv 获取详细信息的值时,每个值都附加了额外的分隔符 ("),这导致我的程序失败。

谁能提供一个解决方案来消除额外的分隔符并只获得我在 csv 中提供的确切值?

【问题讨论】:

  • 我的程序将根据 ID 从 csv 文件中获取值,其中一列将具有 json 值。如果我在我的程序中做更复杂的事情,还有其他简单的方法吗?提前致谢
  • 不,我只是想知道换行符。但如果在 Excel 文件中无法避免,则必须在此处处理。
  • 您为什么要编写自己的 CSV 阅读器?有许多优秀的 CSV 库,使用其中的一个!
  • 嗨 gagravarr.. 我试过 opencsv 和其他库。当我在我的 csv 数据中使用 json 时,我遇到了这个问题。有没有办法处理json?请提供一个示例程序,对我有帮助

标签: java json csv apache-poi string-split


【解决方案1】:

读完一行:

line.replaceAll( "\"", "" );

仅当您的数据中没有任何引号时才有效。否则,它会更复杂 - 解析。

(当然,我指的是我们之前看到的 sn-p,当行读取没有以包含结束 '}' 的行结束时。)

如果你想保留一个报价,

line.replaceAll( "\"\"", "\"" );

我不确定结尾的 }"|" - 为什么第一个数据样本中没有?当然,您可以使用子字符串简单地丢弃最后 3 个字符。

如果您通过以下方式检查组中的最后一行:

if( inline.endsWith( "}\"|\"" ) ){
    inline = "}\"";
}

现在这三个角色都消失了,你知道那个组已经结束了。然后,删除其他引号,或用单引号替换双引号。

第三个字段也将用引号括起来。您可以使用删除这些

String[] cells = line.split( "|" );
cells[2] = cells[2].substring( 1, cells[2].length()-2 );

// and now double quotes to single quotes
cells[2] = cells[2].replaceAll( "\"\"", "\"" );

【讨论】:

  • Yes.. 问题是当我在while循环中检查结束'}'时,它返回空指针异常,因为该值添加了额外的分隔符(“)。所以while循环到达'}'后没有结束。如何跳过while looo中的额外分隔符?
  • 现在有意义吗?一起:读取行,在连接部分行时检测组的结尾,拆分组合行(根据'|'),删除(在第 3 个单元格中)外部引号,然后将所有双引号转换为单引号。
  • 非常感谢您的快速解决方案。我现在就试试
  • 它工作了 :) 我还做了很多正则表达式来替换解析 Json 的特殊字符
  • 好。另一个关门了;-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-29
  • 1970-01-01
  • 1970-01-01
  • 2020-01-30
  • 2018-03-10
  • 1970-01-01
相关资源
最近更新 更多