Java JSP JSTL函数fn:拆分工作不正常

Java JSP JSTL函数fn:拆分工作不正常,java,jsp,split,jstl,Java,Jsp,Split,Jstl,今天,我遇到一个问题,需要你的帮助来解决 我正在尝试使用JSTLfn:split函数拆分字符串,同样 <c:set var="stringArrayName" value="${fn:split(element, '~$')}" /> 仅应为2字符串部分,但它提供 abc pqr xyz 这里,总共有3个字符串部分返回,这是错误的 注意:-我在JSP顶部添加了。 任何帮助都非常感谢 JSTL split与Java split的工作方式不同您可以从源代码中检查差异: 所以很明显

今天,我遇到一个问题,需要你的帮助来解决

我正在尝试使用JSTL
fn:split
函数拆分字符串,同样

<c:set var="stringArrayName" value="${fn:split(element, '~$')}" />
仅应为2字符串部分,但它提供

abc
pqr
xyz
这里,总共有3个字符串部分返回,这是错误的

注意:-我在JSP顶部添加了


任何帮助都非常感谢

JSTL split与Java split的工作方式不同您可以从源代码中检查差异:

所以很明显,
fn:split
使用
StringTokenizer

    ...
    StringTokenizer tok = new StringTokenizer(input, delimiters);
    int count = tok.countTokens();
    array = new String[count];
    int i = 0;
    while (tok.hasMoreTokens()) {
        array[i++] = tok.nextToken();
    }
    ...
不像
java.lang.String.split
那样使用

它说:

为指定的字符串构造字符串标记器角色 delim参数中是分隔标记的分隔符。 分隔符本身不会被视为标记

fn:split究竟是如何工作的? 它在分隔符中的每个字符上拆分,在您的情况下,您有两个字符
~
$
,因此如果您的字符串是
abc~$pqr$xyz
,它将按如下方式拆分:

abc~$pqr$xyz
   ^^   ^
第一次拆分:

abc
$pqr$xyz
第二部分:

abc
pqr$xyz
第三部分:

abc
pqr
xyz

解决方案

在Servlet中使用split而不是JSTL

例如:

String[] array = "abc~$pqr$xyz".split("~\\$");

谢谢@YCF\u L,它现在可以使用Pattern=Pattern.compile(“\\~\$”)工作了@vishalgajera您可以像这样使用split
String[]array=“abc~$pqr$xyz”。split(“~\\$”)
abc
$pqr$xyz
abc
pqr$xyz
abc
pqr
xyz
String[] array = "abc~$pqr$xyz".split("~\\$");