2011-11-11 37 views
2

我正在尝试读取文件,因此当我收到','逗号分隔符时,我将拆分这些字段。但是有些字段中有',',但它们被包含在双引号内,因此我怎样才能将它拆分为,分隔符。 这里是我做了什么当使用String.split()拆分时转义'''分隔符

String[] cols = line.split(Pattern.quote(",")); 

我应该如何只在Java修改此使用split()。如果分离器是管道'|',我还需要做些什么改变?

回答

5

我回答了类似的问题here。第一个表达式,修改你的任务,会读

,(?=([^"]*"[^"]*")*[^"]*$) 

这表达确保偶数引号跟随它标识引用逗点。

+0

正则表达式的+1。我只想提一下,在遇到的每个逗号处,正则表达式引擎必须扫描文件的其余部分以确定前面是否有引号数量,如果文件很大,这可能会造成巨大的开销。 –

+0

hii我在你的代码中试过你的正则表达式 String [] cols = line.split(Pattern.quote(“,(?=([^”] *“[^”] *“)* [^”] * $)它显示我运算符*是未定义的参数类型(S)java.lang.String,java.lang.String ..我非常天真的正则表达式因此我不明白这意味着这意味着 – justin3250

+1

@ justin3250:要将正则表达式表示为一个java字符串,您需要将引号,即'',(?=([^ \“] * \”[^ \“] * \”)* [^ \“] * $)“' – Jens

3

我不会尝试使用这个正则表达式。正则表达式对此不太适合 - 虽然创建这样一个正则表达式是可能的,但阅读起来会很糟糕。

有很多开源的CSV解析器。只是一个quick search发现了很多项目 - 我会在写你自己的之前看看那些项目。

0
String line="one|two,three"; 
    String cols[]= line.split("[,|\\|]"); 

类似上面的东西会根据和|

对于元字符|你必须用\ \我同意他人的意见来划界;最好使用CSV解析器而不是重新创建它。