delim c的属性:forTokens在分割内容时存在问题

时间:2015-04-22 01:14:32

标签: java jsp jsp-tags

我有一个JSP页面:

<c:forTokens items="aaa::::BBB::::[hhhh://abcabc]::::ccc" delims="::::" var="name">
<c:out value="${name}"/><br>
</c:forTokens>

我希望输出为:

aaa
BBB
[hhhh://abcabc]
ccc

但我得到的是:

aaa
BBB
[hhhh
//abcabc]
ccc

请帮助我怎样才能避免这种情况?我也试过这段代码:

<c:set var="string1" value="aaa::::BBB::::[hhhh://abcabc]::::ccc"/>
<c:set var="string2" value="${fn:split(string1, '::::')}" />
<c:forEach var="name" items="${string2}">
<c:out value="${name}"/><br>
</c:forEach>

2 个答案:

答案 0 :(得分:0)

delims定义单字符分隔符集。您可以编写自己的自定义标记来分割您喜欢的输入。

有关创建JSP标记的教程

http://docs.oracle.com/cd/E11035_01/wls100/taglib/quickstart.html

forTokens标记的来源

http://grepcode.com/file/repo1.maven.org/maven2/javax.servlet/jstl/1.2/org/apache/taglibs/standard/tag/common/core/ForTokensSupport.java?av=f

该标记实际上使用java.util.StringTokenizer进行拆分。

https://docs.oracle.com/javase/7/docs/api/java/util/StringTokenizer.html

答案 1 :(得分:0)

我无法理解我在评论中发布的最初想法。也许正则表达式专家可以让它发挥作用。挑战在于找到Pattern.quote返回的正则表达式模式。一旦找到它,它可以直接在JSTL中使用。以下JSP是我能做的最好的。

<%@page import="java.util.regex.Pattern" %>
<%@ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core" %>
<%
  String[] myArray = "aaa::::BBB::::[hhhh://abcabc]::::ccc".split(Pattern.quote("::::"));
  pageContext.setAttribute("myArray", myArray);
%>
<c:forEach items='${myArray}' var="name">
    ${name}<br>
</c:forEach>