今天,我遇到了一个问题,需要你的帮助来解决它。
我正在尝试使用 JSTL fn:split
功能分割字符串,同样,
<c:set var="stringArrayName" value="${fn:split(element, '~$')}" />
实际字符串: - "abc~$pqr$xyz"
预期结果: -
abc
pqr$xyz
只有2弦的部分期待,但它给出了
abc
pqr
xyz
这里,返回总共3个字符串的部分,这是错误的。
注意: - 我添加了<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> at the top of JSP.
任何帮助真的很感激!!
答案 0 :(得分:1)
JSTL拆分不像Java拆分那样可以检查与代码源的区别:
org.apache.taglibs.standard.functions.Functions.split
public static String[] split(String input, String delimiters) {
String[] array;
if (input == null) {
input = "";
}
if (input.length() == 0) {
array = new String[1];
array[0] = "";
return array;
}
if (delimiters == null) {
delimiters = "";
}
StringTokenizer tok = new StringTokenizer(input, delimiters);
int count = tok.countTokens();
array = new String[count];
int i = 0;
while (tok.hasMoreTokens()) {
array[i++] = tok.nextToken();
}
return array;
}
public String[] split(String regex, int limit) {
return Pattern.compile(regex).split(this, limit);
}
显然,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();
}
...
不喜欢使用regular expression
的java.lang.String.split
return Pattern.compile(regex).split(this, limit);
//-----------------------^
来自StringTokenizer documentation:
为指定的字符串构造字符串标记生成器。 人物 在delim参数中是分隔标记的分隔符。 分隔符本身不会被视为令牌。
它分隔分隔符中的每个字符,在您的情况下,您有两个字符~
和$
,所以如果您的字符串是abc~$pqr$xyz
,它将像这样拆分:
abc~$pqr$xyz
^^ ^
第一次分裂:
abc
$pqr$xyz
第二次分裂:
abc
pqr$xyz
第3次分裂:
abc
pqr
xyz
<强>解决方案强>
在Servlet中使用split而不是JSTL
例如:
String[] array = "abc~$pqr$xyz".split("~\\$");