A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© lcjasas 中级黑马   /  2013-4-11 16:21  /  2087 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 lcjasas 于 2013-4-11 19:41 编辑

例句“return sb.toString().substring(0,sb.toString().length());“

substring  public  substring(int start,  int end)
返回一个新的 String,它包含此序列当前所包含的字符子序列。该子字符串从指定的 start 处开始,一直到索引 end - 1 处的字符。
参数: start - 起始索引(包含)。 end - 结束索引(不包含)。
返回: 新的字符串。
抛出: StringIndexOutOfBoundsException - 如果 start 或 end 为负数或大于 length();如果 start 大于 end。

API上说“该子字符串从指定的 start 处开始,一直到索引 end - 1 处的字符”,可是自己试验了一下,好像没有得出效果。


(修改一下帖子)

别再说什么什么异常了,我这是从API中复制出来的。知道异常会抛出StringIndexOutOfBoundsException
就没有人试一下代码,然后在回答的吗?。。。

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

9 个回复

倒序浏览
sb.toString().substring(0,sb.toString().length());发生角标越界,因为length返回了字符串sb的长度,而字符串的角标计数是从0开始的,所以会出现角标越界,就该是
sb.toString().substring(0,sb.toString().length()-1);

回复 使用道具 举报
substring
public String substring(int beginIndex, int endIndex)
返回一个新字符串,它是此字符串的一个子字符串。该子字符串从指定的 beginIndex 处开始, endIndex:到指定的 endIndex-1处结束。
示例:
"hamburger".substring(3,8) returns "burge"
"smiles".substring(0,5) returns "smile"
参数:
beginIndex - 开始处的索引(包括)。
endindex 结尾处索引(不包括)。
返回:
指定的子字符串。
抛出:
IndexOutOfBoundsException - 如果 beginIndex 为负,或length大于字符串长度。
示例
<script type="text/javascript">
var str="Hello world!"
document.write(str.substring(1,3));
</script>
上面返回字符串:"el";
str.substring(1,2) //返回e
str.substring(1) //返回"ello world";
还有此函数中会出现奇怪的现象,当出现str.substring(5,0);
这又是怎么回事,不过返回的是"hello",
str.substring(5,1) //返回"ello",截去了第一位,返回余下的.
可见substring(start,end),可以有不同的说明,即start可以是要返回的长度,end是所要去掉的多少个字符(从首位开始).
在JS中,substr(start,length),用得较方便.

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
API中所说的substring(int start,  int end)这个方法里,start和end参数是指的字符串的角标,而length()方法返回的是字符串长度,而不是最后一个角标。字符串的角标是从0到str.length()-1的。
所以你这样写会产生角标越界异常,需要修改成
  1. return sb.toString().substring(0,sb.toString().length()-1);
复制代码

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
Java1.7API中:关于sbustring抛的异常:
Throws:
IndexOutOfBoundsException - if the beginIndex is negative, or endIndex is larger than the length of this String object, or beginIndex is larger than endIndex.
回复 使用道具 举报
熊永标 发表于 2013-4-11 16:43
sb.toString().substring(0,sb.toString().length());发生角标越界,因为length返回了字符串sb的长度,而字符 ...

无语,要是异常,我会说出来的。。。
回复 使用道具 举报
不知道你说的是什么问题。。
回复 使用道具 举报
wuddd 高级黑马 2013-4-12 07:11:24
8#
“return sb.toString().substring(0,sb.toString().length());“这句话不会抛出异常,这是首先要回答的问题。

假设String sb=“ABCDE”;
那么sb.length()的值就是5,即sb.substring(0,5),开始索引是0(即字符“A”,包括这个字符),结束索引是5(在字符"E"后面,不包括)。也就是说应该包括从“A”到“E”的之间的所有字符。

在学习的时候,把索引位置0对应的是第一个字符的位置,这是关键点。
回复 使用道具 举报
吴超老师 发表于 2013-4-12 07:11
“return sb.toString().substring(0,sb.toString().length());“这句话不会抛出异常,这是首先要回答的问 ...

谢谢老师~也就是说我也输出的如果是String sb=“ABCDE。”;
我要去掉后面的"。",就要.length()-1了。
回复 使用道具 举报
wuddd 高级黑马 2013-4-12 14:44:29
10#
lcjasas 发表于 2013-4-12 14:03
谢谢老师~也就是说我也输出的如果是String sb=“ABCDE。”;
我要去掉后面的"。",就要.length()-1了。 ...

字符串“ABCDE。”一共有6个字符。长度是length(),等于6。如果是想输出前五个字符,那么就是sb.substring(0, sb.length()-1)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马