我有一个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>
答案 0 :(得分:0)
delims
定义单字符分隔符集。您可以编写自己的自定义标记来分割您喜欢的输入。
有关创建JSP标记的教程
http://docs.oracle.com/cd/E11035_01/wls100/taglib/quickstart.html
forTokens标记的来源
该标记实际上使用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>