日期:2014-05-16 浏览次数:20330 次
最近项目中需要对数据做拆分处理的问题,于是乎选择用fn:split、c:forTokens等对数据进行拆分
?
此处以split为例说明
?
1、当我们以一个字符作为分隔符的时候,我们会发现,功能很强大,拆分的数据也很正确
如:${fn:split('a;b;c',';')} 我们会得到 a b c
?
2、但当我们用多个字符作为分隔符的时候 ,问题就产生了
如:对'a!@#b#@!c!@#d'这串字符做分割处理
我们先用!@#
${fn:split('a!@#b#@!c!@#d','!@#')} ,数组循环后结果为 a b c d
然后我们用#@!
${fn:split('a!@#b#@!c!@#d','#@!')} ,数组循环后结果为 a b c d
我们发现得到的结果是一样的
?
3、我们用replace对其操作,会发现结果大大不同
${fn:replace('a!@#b#@!c!@#d','!@#',' ')} ,结果为 a b#@!c d
${fn:replace('a!@#b#@!c!@#d','#@!',' ')} ,结果为 a!@#b c!@#d
4、解决办法
那我们如何区分这种混合的情况呢,可能您现在已经想到了,那就是:
先用另外的字符替换#@!,如%^,分成数组后,在对此数组进行forTokens 的遍历分割
代码如下:
<c:set var="replacedAbs" value="${fn:replace('a!@#b#@!c!@#d','#@!','%^')}"/>
<c:forTokens items="${replacedAbs}" delims="!@#" var="splitAbs">
??????????? ${splitAbs }。<br>
</c:forTokens>
5、总结
?
c:forTokens、split? 在以分隔符切分数据时,是以单个字符分的
replace与之不同,replace在替换多字符时是连续的