我知道如何使用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个问题有空格字符作为分隔符,空格是也出现在我的问题中,这使问题变得复杂,所以如果我使用那个答案,它就不会起作用,请不要将它标记为重复。
答案 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,并将每个项目设置为空白空间作为占位符。