如何使用JSTL在jsp页面内拆分用“/”分隔的字符串?
我有这种格式的字符串: **
“23/11/2010”
* 。有时,字符串可能是这样的:*
“1/1/2010”
* 。 我需要做一些事情才能将字符串拆分为三个不同的子字符串: *
“23”,“11”,“2010”。
** 这是因为我需要将它们中的每一个放在三个不同的文本字段中,如下所示:
<input type="text" value="23">/
<input type="text" value="11">/
<input type="text" value="2010">
我找不到任何有用的例子。
提前致谢!
答案 0 :(得分:47)
您可以使用fn:split()
功能。
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
...
<c:set var="dateParts" value="${fn:split(dateString, '/')}" />
...
<input type="text" name="day" value="${dateParts[0]}" />
<input type="text" name="month" value="${dateParts[1]}" />
<input type="text" name="year" value="${dateParts[2]}" />
确保事先验证日期格式:)如果它是java.util.Date
而不是java.lang.String
会更容易。然后,您可以使用<fmt:formatDate>
将其格式化为可靠且固定的字符串格式。否则,您需要按fn:length()
添加对数组长度的检查,并防止fn:escapeXml()
潜在的XSS攻击漏洞。
另外需要注意的是,该函数将正则表达式作为参数而不仅仅是普通的字符序列。因此,如果你想分割代表正则表达式中特殊字符的字符,那么你需要用反斜杠来转义它们。另请参阅How to split a string in Java了解适用于fn:split()
的一般指南。
答案 1 :(得分:9)
值得注意的是,在他们的搜索中发现这个问题的其他人(就像我做的那样)JSTL有一个有用的标签<c:forTokens>
。
这将通过提供的分隔符拆分输入字符串,然后迭代生成的标记集合。
如此处所示,以下代码:
<c:forTokens items="A,B,C,D" delims="," var="mySplit">
<c:out value="${mySplit}"/></br>
</c:forTokens>
会导致:
A
B
C
D
答案 2 :(得分:4)
使用JSTL fn库。他们在那里有一个split。