JSP中如何仅按双连字符“--”拆分字符串?
解决JSP中按双连字符"--"拆分字符串时单"-"被误拆的问题
问题根源在于JSTL的fn:split方法是基于StringTokenizer实现的——它会把分隔符参数里的每个字符都当作独立分隔符,而非匹配完整字符串。所以传入"--"时,单个"-"也会触发拆分,导致"e-mail"这类字符串被错误拆分。
下面是两种可行的解决方法:
方案一:直接使用Java String的split()方法
EL表达式支持直接调用String类的split()方法,该方法基于正则表达式匹配完整字符串,能严格按"--"拆分,单个"-"不会被当作分隔符:
<c:forEach var="message" items="${tempMessage.split('--')}" varStatus="tempLoop"> <!-- 在这里编写处理每个拆分后元素的逻辑 --> </c:forEach>
如果原字符串不含"--",split("--")会返回仅包含原字符串的数组,遍历逻辑无需额外调整。
方案二:先判断再拆分(逻辑更清晰)
如果需要明确控制拆分触发条件,可以用fn:contains先判断字符串是否包含"--",再决定是否执行拆分:
<c:choose> <c:when test="${fn:contains(tempMessage, '--')}"> <c:forEach var="message" items="${tempMessage.split('--')}" varStatus="tempLoop"> <!-- 处理拆分后的元素 --> </c:forEach> </c:when> <c:otherwise> <!-- 直接处理原字符串(无--无需拆分) --> <c:set var="message" value="${tempMessage}" /> <!-- 编写单个元素的处理逻辑 --> </c:otherwise> </c:choose>
内容的提问来源于stack exchange,提问作者The big bakchod show
相关产品推荐
相关产品推荐

