if string contains ";", let it be ";;". many app is do like this. demo: str1="aaa"; str2="b;b"; str3=";c;";str="aaa;b;;b;;;c;;";// recover: // split if odd ; // get {"aaa","b;;b",";;c;;"} // ;; to ; {"aaa","b;b",";c;"}
看看csv是怎么实现的吧,两种csv,standard and microsoft.general speaking, using escaper转移符中文好象叫。 但是string的append和split是很花时间的,所以并不推荐你这么做,如果你一定要做,如果量少用String concat方法,如果量多,typically more than couple of hundred, 千千万万要用StringBuffer append方法。你可一些个程序test一下用StringBuffer和String的时间差。
str1="aaa";
str2="b;b";
str3=";c;";str="aaa;b;;b;;;c;;";// recover:
// split if odd ;
// get {"aaa","b;;b",";;c;;"}
// ;; to ; {"aaa","b;b",";c;"}
但是string的append和split是很花时间的,所以并不推荐你这么做,如果你一定要做,如果量少用String concat方法,如果量多,typically more than couple of hundred, 千千万万要用StringBuffer append方法。你可一些个程序test一下用StringBuffer和String的时间差。
<item value="String1"/>
<item value="String2"/>
<item value="String3"/>
<item value="String4"/>
...
</XML>
用这个做分割符,肯定没不会有冲突 呵呵 :)
还是用";"分隔,在把str1和str2...strn组装成一个字符串的时候,对于str1和str2...strn中含有的“;”在其前面都再加上一个“;”,这样的话,则
str1="abcd;ef"会变成"abcd;;ef"
str2="hij;;kl"会变成"hij;;;kl"
...
也就是说,若str含有连续的";"则使其比原来的多一个";",这样,在解析的时候,若遇到一个";" 说明是字符串的分隔符,若遇到多于一个";",说明使原来字符串包含的,处理时使其比原来少一个";" 即可。
例如:
有4个字符串wjl1,wangjun,whss,ssff33 用“(数字)”表示字符串的长度
用"[数字]”表示有几个字符串,并且其在构造后字符串的最前面。这样可以把上述的字符串构造如下字符串
[4](4)(7)(4)(6)wjl1wangjunwhssssff33这个再从数据库中取值分解,可以看取出字符串的开头“[]”括起来的值是多少,以确定要分成几个字符串,然后接下来的以“()”括起来的部分是每个字符串的长度。把每个字符串长度取出后剩余的字符串即是所有字符串组合的字符串,按照每个字符串长度和该字符串是第一个字符串,即可取出该字符串。
这样做就可以解决各位提出的字符串分割的问题了。
可以考虑一下
"any_char","any_char",...
要是any_char本身就有引号和逗号,用转义符处理,
即本来的
adfd"ad,f
转变成
adfd\"ad\,f
如果本来有 \ 则转成 \读取的时候去掉转义符就可以了。这是完全没有歧义的做法
Java: \ --> \Oracle: ' -->''
must use escape methods.