日期:2014-05-20  浏览次数:20643 次

怎么分割这个字符串?
我有这样一个字符串S: S = "abc,fun(a,b),a='x,y'"; 
我希望得到这样一个数组A:A == {"abc","fun(a,b)","a='x,y'"} 
也就是说做为函数参数间分隔符、字符串中出现在逗号不做为数组分割依据。 

如果直接用 A = S.split(","); 
只会得到: A == {"abc","fun(a","b)","a='x","y'"} 
显然这不是我希望的结果。 

就像这个SQL:select id,isNull(name,'') as name,'a,b' as str from user 
sqlServer会从中提取出: 
  id 
  isNull(name,'') as name 
  'a,b' as str 
做为最终字段,它是怎么用逗号拆分出这些字段的呢? 


有没有其它办法,用正则表达式也行。

------解决方案--------------------
先设定闭合符号...然后遍历字符串...忽略闭合符号中的分割符号...
------解决方案--------------------
可以考虑两次处理你的字符串
第一次处理函数的。。。通过查找"(",然后匹配")",当然结合","以及函数厘米的"("或者")",
通过第一次去处掉函数。。。
第二次再处理。。。。。。。。

------解决方案--------------------
我可以写个函数来做,也是用,作为分割符号,但是在处理的时候,我们一旦
遇到括号就把括号内的内容做为一个符号处理。
------解决方案--------------------
1,按","分割 
得到: A == {"abc","fun(a","b)","a='x","y'"}
2,遍历A,
indexof()方法,(和)不成对则与下一元素附加,直到成对。
------解决方案--------------------
我觉得问题没有大家说的那么简单
必须对以下几种情况做出判断:
1、S = "abc,fun(a,b'c),a=x,y'"; 分隔符与字符串的优先级
2、S = "abc,fu(n(a,b),a='x,y'"; 是取第一个'('还是第二个'('
3、S = "abc,fun(a,b),a'='x,y'"; 奇数个'如何处理
4、所谓的分隔符具体指哪些:()、{}、《》、“”

具体的规则还是要看楼主具体需求来制定

个人感觉不是简简单单就可以解决的。本人也还没有想到比较好的方法来实现。


------解决方案--------------------
给你个思路:
1.先用正则表达式,把()和'' 里面的, 替换为*或者一个不会用到的符号.
2.split(',')得到数组.
3.遍历数组,把步骤1种的符号替换回来.