JSTL学习小结——对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)所形成的子字符串。

  此外通过代码还发现了该方法一些有趣的结论,先上代码:

<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>

运行结果:


测试结论如下:

1、fn:substring方法是按首尾索引值截取子字符串,且包含子串的首字符索引值,不含尾字符索引值;

2、第三参数可以是0、小数、负数。
 2.1)endIndex = 0,得到空字符串"";
 2.2)endIndex为( 0, +∞ )内的小数,截尾取整后得到对应的结果,即${fn:substring(string,5,15.5)}与${fn:substring(string,5,15)}是等效的;
 2.3)endIndex∈( -1, 0 ),效果同endIndex=0,得到空字符串"";
 2.4)endIndex∈( -∞, -1 ],将得到beginIndex及其后所有内容,相当于endIndex=(string.length+1);

3、进一步测试可以发现,第二参数beginIndex也可以是负数、小数,但为负数时与为0时等效,小数也是结尾取整得到对应结果;

4、原字符串的index值是从0开始的。


参考资料:

http://www.runoob.com/jsp/jstl-function-substring.html

http://www.tutorialspoint.com/jsp/jstl_function_substring.htm


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安冬的码畜日常

您的鼓励是我持续优质内容的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值