在Java中,如何拆分这些行?

时间:2017-06-22 21:03:18

标签: java split

我知道如何使用Java的字符串拆分方法,比如

String s="a,b,c";
s.split(",");

但如何分割以下几行:

 FirstName,LastName,Companies,Title,EmailAddress,PhoneNumbers,Tags,Note
 Tom,Smith,ABC Co.,Manager,toms@xyz.com,,,
 John,White,"Some-Company, Inc.","Network Manager, Architect",xyz@abc.com,,,

很容易处理前2行,但第3行有一些麻烦,因为它包括[,#34;]内的[,],有什么建议吗?

编辑:我已经查看了其他2个类似的问题和答案,但它们与我的问题不同,我的问题有[,]作为分隔符,其他2个问题有空格字符作为分隔符,空格是也出现在我的问题中,这使问题变得复杂,所以如果我使用那个答案,它就不会起作用,请不要将它标记为重复。

1 个答案:

答案 0 :(得分:0)

经过一些研究和测试,我找到了答案,这里有一些示例代码:

String str="John,White,\"Some-Company, Inc.\",\"Network Manager, Architect\",xyz@abc.com,,,";
Vector<String> v=new Vector<String>(8);
for (int i=0;i<8;i++) v.add("");

String regex="\"([^\"]*)\"|([^,\\s][^\\,]*[^,\\s]*)";
m=Pattern.compile(regex).matcher(str);
int index=0;
while (m.find())
{
  if (m.group(1) != null) v.set(index,"Quoted [" + m.group(1) + "]");
  else v.set(index," Plain [" + m.group(2) + "]");
  index++;
}
for (int i=0;i<v.size();i++) System.out.println("<"+(i+1)+"> "+v.elementAt(i));

由于我还必须在最后考虑一些空项目,所以我将向量的大小设置为8,并将每个项目设置为空白空间作为占位符。