【问题标题】:How to correctly split strings in JSTL?如何在 JSTL 中正确拆分字符串?
【发布时间】:2012-04-24 18:43:33
【问题描述】:

如何使用 JSTL 在 jsp 页面中拆分以“/”分隔的字符串?

我有一个这种格式的字符串: **

“2010 年 11 月 23 日”

*。有时,字符串可能是这样的:*

“2010 年 1 月 1 日”

*。 我需要做一些事情才能将字符串拆分为三个不同的子字符串: *

“23”、“11”、“2010”。

** 这是因为我需要将它们中的每一个都放在三个不同的文本字段中,如下所示:

<input type="text" value="23">/
<input type="text" value="11">/
<input type="text" value="2010">

我还没有找到任何可行的例子。

提前致谢!

【问题讨论】:

    标签: jsp split jstl


    【解决方案1】:

    您可以为此使用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,会更容易。然后,您可以先使用&lt;fmt:formatDate&gt; 将其格式化为可靠且固定的字符串格式。否则,您需要通过fn:length() 添加对数组长度的检查,并通过fn:escapeXml() 防止潜在的 XSS 攻击漏洞。

    另外需要注意的是,该函数将正则表达式作为参数,而不仅仅是纯字符序列。因此,如果您想拆分代表正则表达式中特殊字符的字符,那么您需要使用反斜杠对它们进行转义。另请参阅How to split a string in Java,了解同样适用于fn:split() 的一般准则。

    【讨论】:

    • 我可以使用 foreach 吗?
    【解决方案2】:

    对于在搜索中发现此问题的其他人(就像我所做的那样),值得注意的是 JSTL 具有有用的标签 &lt;c:forTokens&gt;。 这将通过提供的分隔符拆分输入字符串,然后遍历生成的标记集合。

    如下所示,代码如下:

    <c:forTokens items="A,B,C,D" delims="," var="mySplit">
       <c:out value="${mySplit}"/></br>
    </c:forTokens>
    

    会导致:

    A
    B
    C
    D
    

    文档:JSTL core Tag forTokens

    【讨论】:

      【解决方案3】:

      使用 JSTL fn 库。他们在那里有一个split

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-29
        • 1970-01-01
        • 1970-01-01
        • 2017-07-08
        相关资源
        最近更新 更多