JSTL中的字符串替换不会发生在特定字符串中

时间:2012-10-05 10:30:23

标签: jsp jstl string-matching

我对JSTL很新,所以需要你的帮助。

我有一个名为“specialties”的字符串,我在其中检查特定字符串是否存在,如果存在,我检查标记对应的输入,然后用空字符串替换它。

<input type="checkbox" name="specialities" value="OB/Gyn" 
<c:if test="${fn:containsIgnoreCase(asc_details.specialities, 'OB/Gyn')}">
<c:set var="specialities" value="${fn:replace(specialities,'OB/Gyn','')}"></c:set>
<c:out value="${'checked'}"/></c:if>
/>&nbsp;OB/Gyn

<input type="checkbox" name="specialities" value="Plastic/reconstructive"
<c:if test="${fn:containsIgnoreCase(specialities, 'Plastic/reconstructive')}">
<c:set var="specialities" value="${fn:replace(specialities,'Plastic/reconstructive','')}"></c:set>
<c:out value="${'checked'}"/></c:if>
/>&nbsp;Plastic/reconstructive

它适用于第一个匹配的字符串“OB / Gyn”,并用空字符串替换它,但它不会用空字符串替换“Plastic / reconstructive”。我无法弄清楚为什么会这样。请帮忙。

1 个答案:

答案 0 :(得分:1)

这里可能存在区分大小写错误。 containsIgnoreCase()测试不区分大小写,因此它将通过例如“plastic”,“Plastic”,“PlAsTiC”和“PLASTIC”,但replace()区分大小写并且它将仅替换“Plastic” ”

它失败了你很可能意味着价值与案件不完全一致。也许实际上“塑料/重建”左右?

您基本上需要修复外壳(并将containsIgnoreCase()替换为contains()),或执行不区分大小写的替换,但JSTL中不提供此功能。你很可能需要一个人养一个。