如何在JSTL中正确拆分字符串?

Luc*_*cas 17 jsp split jstl

如何使用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">
Run Code Online (Sandbox Code Playgroud)

我还找不到任何有用的例子.

提前致谢!

Bal*_*usC 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]}" />
Run Code Online (Sandbox Code Playgroud)

确保事先验证日期格式:)如果它是a java.util.Date,而不是a,那将更容易java.lang.String.然后,您可以首先将<fmt:formatDate>其格式化为可靠且固定的字符串格式.否则,您需要添加对数组长度的检查fn:length()并防止潜在的XSS攻击漏洞fn:escapeXml().

另外需要注意的是,该函数将正则表达式作为参数而不仅仅是普通的字符序列.因此,如果你想分割代表正则表达式中特殊字符的字符,那么你需要用反斜杠来转义它们.另请参阅如何在Java中拆分字符串以获取适用的一般准则fn:split().


Luk*_*uke 9

对于在搜索中发现这个问题的其他人(如我所做),JSTL具有有用的标签值得注意<c:forTokens>.这将通过提供的分隔符拆分输入字符串,然后迭代生成的标记集合.

如此处所示,以下代码:

<c:forTokens items="A,B,C,D" delims="," var="mySplit">
   <c:out value="${mySplit}"/></br>
</c:forTokens>
Run Code Online (Sandbox Code Playgroud)

会导致:

A
B
C
D
Run Code Online (Sandbox Code Playgroud)

文档:JSTL核心标签forTokens


dig*_*oel 5

使用 JSTL fn 库。他们在那里分裂