codecamp

JSTL fn:substring()函数

fn:substring()函数

在JSTL标准标签库中,函数标签库fn:substring()方法比较特殊,语法为:

语法1

${fn:substring(<string>,<beginIndex>,<endIndex>)} 

功能:从字符串string中,截取从起始索引值开始(包含),到终止索引值结束(不包含)的子字符串。

  该标签类似Excel中的MID函数,其语法结构为:

语法2

MID(text, start_num, num_chars) 

其中 start_num 相当于这里的 beginIndex,只是起始编号为 1;num_chars 代表子文本的长度。


对于fn:substring()方法,网上许多资料以字符串“This is first String.”为例,演示了 ${fn:substring("This is first String.", 5, 15)} 的运行结果,但并未提示“子字符串是不包含终止索引值对应的字符元素”这一要点,在此特别强调一。个人认为,该标签语法结构若改为如下形式更便于理解:

语法3

${fn:substring(<string>,<beginIndex>,<beginIndex>+<substringLength>)} 

这样,参数3就变成了子字符串首字符索引值 beginIndex 与子串总长 substringLength 的和,这样对于 ${fn:substring("This is first String.", 5, 15)} 就可以理解为:从原字符串索引值为5的字符开始,截取10个字符(=15-5)所形成的子字符串。

注意:

  1. fn:substring 方法是按首尾索引值截取子字符串,且包含子串的首字符索引值,不含尾字符索引值;
  2. 第三参数可以是 0、小数、负数。 
    • endIndex = 0,得到空字符串"";
    • endIndex为( 0, +∞ )内的小数,截尾取整后得到对应的结果,即 ${fn:substring(string,5,15.5)}与${fn:substring(string,5,15)} 是等效的; 
    • endIndex∈( -1, 0 ),效果同 endIndex=0,得到空字符串"";
    • endIndex∈( -∞, -1 ],将得到 beginIndex及其后所有内容,相当于 endIndex=(string.length+1);
  3. 进一步测试可以发现,第二参数beginIndex也可以是负数、小数,但为负数时与为 0 时等效,小数也是结尾取整得到对应结果;
  4. 原字符串的 index 值是从 0 开始的。

下面我们看一个简单的例子:

<body>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
	<h1>JSTL函数标准标签库之fn:substring()方法示例</h1>
	<h3>语法:<%="${fn:substring(<string>, <beginIndex>, <endIndex>)}" %></h3>
	<hr>
	<c:set var="strDemo" value="This is first String."/>
	<h3>原字符串为:<c:out value="${strDemo}"/></h3>
	<h3><%="${fn:substring(strDemo, 5, 0)}" %> = 
		"<c:out value="${fn:substring(strDemo, 5, 0)}" />"</h3>
	<h3><%="${fn:substring(strDemo, 5, -0.4)}" %> = 
		"<c:out value="${fn:substring(strDemo, 5, -0.4)}" />"</h3>
	<h3><%="${fn:substring(strDemo, 5, -0.5)}" %> = 
		"<c:out value="${fn:substring(strDemo, 5, -0.5)}" />"</h3>
	<h3><%="${fn:substring(strDemo, 5, -0.6)}" %> = 
		"<c:out value="${fn:substring(strDemo, 5, -0.6)}" />"</h3>
	<h3><%="${fn:substring(strDemo, 5, -1.0)}" %> = 
		"<c:out value="${fn:substring(strDemo, 5, -1.0)}" />"</h3>
	<h3><%="${fn:substring(strDemo, 5, -1.4)}" %> = 
		"<c:out value="${fn:substring(strDemo, 5, -1.4)}" />"</h3>
	<h3><%="${fn:substring(strDemo, 5, -1.5)}" %> = 
		"<c:out value="${fn:substring(strDemo, 5, -1.5)}" />"</h3>
	<h3><%="${fn:substring(strDemo, 5, -1.6)}" %> = 
		"<c:out value="${fn:substring(strDemo, 5, -1.6)}" />"</h3>
	<h3><%="${fn:substring(strDemo, 5, 15.0)}" %> = 
		"<c:out value="${fn:substring(strDemo, 5, 15.0)}" />"</h3>
	<h3><%="${fn:substring(strDemo, 5, 15.4)}" %> = 
		"<c:out value="${fn:substring(strDemo, 5, 15.4)}" />"</h3>
	<h3><%="${fn:substring(strDemo, 5, 15.5)}" %> = 
		"<c:out value="${fn:substring(strDemo, 5, 15.5)}" />"</h3>
	<h3><%="${fn:substring(strDemo, 5, 15.6)}" %> = 
		"<c:out value="${fn:substring(strDemo, 5, 15.6)}" />"</h3>
</body>


结果:



温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }