我有这个字符串:
String code="abc";
我想通过substring
方法从此字符串中提取“c”,但它不起作用:
String code="abc";
String getsmscode=code.substring(2,1);
此代码返回错误
java.lang.StringIndexOutOfBoundsException: length=3; regionStart=2; regionLength=-1
但我不知道为什么?
答案 0 :(得分:14)
您需要阅读the documentation for substring - 第二个参数不是长度,它是结束索引(不包括)。
<强>参数:强>
beginIndex
- 起始索引,包括在内endIndex
- 结束索引,独占。
如有疑问,请阅读文档......
另请注意,如果您只是尝试获取最终字符,则可以使用单参数重载,它会返回从给定起点到字符串末尾的子字符串:
String lastCharacter = text.substring(text.length() - 1);
或者你可以把它作为一个单一角色:
char lastCharacter = text.charAt(text.length() - 1);
答案 1 :(得分:7)
第二个参数不是长度,而是an end index。
String#substring(int beginIndex, int endIndex)
答案 2 :(得分:3)
上面的人已经充分回答了你的问题,但只有一些关于阅读API的提示。
方法通常以单词public开头,然后包含返回类型...即将返回的数据类型。如果预计不会返回任何内容,则无效。
然后是方法的名称和两个括号。
括号之间是它接受的参数类型。
使用这种特殊方法它接受两个整数。这些有助于记录您希望保留的字符串的数量
索引是一个需要理解的重要概念,很难用文字来描述它是如何工作的,但是看一下api描述列表帮助中的例子。
index-1通常意味着计数从0开始,所以在String&#34; Hello World&#34; H的索引为0,d为索引10.请注意,只有9个字母,但我们仍然必须将空格作为字符包含在内,因此在这种情况下它的索引是5。
重要的是要注意,参数描述中的api提及排除和包含。这只意味着返回的字符串将包含由第一个参数索引的字母,但不包括由第二个参数索引的字母。
如果你需要做的只是提取字符串中的最后一个字母,无论字符串大小有多长,一个简单的解决方案
stringName.substring(stringName.length()-1);
答案 3 :(得分:0)
索引从0开始。您可以尝试
String code="abc";
String getsmscode=code.substring(2);
答案 4 :(得分:0)
我认为substring将起始索引或起始索引和结束索引作为参数:
http://docs.oracle.com/javase/6/docs/api/java/lang/String.html
你给它一个大于结束索引的起始索引,因此它会变得混乱,因为返回的长度是负数。交换1和2。
答案 5 :(得分:0)
使用也可以实现这一点。
String getsmscode = code.substring(2,3);
方法说明
public String substring (int start, int end)
返回一个字符串,其中包含此字符串中字符的子序列。返回的字符串共享此字符串的后备数组。
<强>参数强>
start - 第一个字符的偏移量。
结束 - 超过最后一个字符的偏移量。
返回一个新字符串,其中包含从开始到结束的字符 - 1
抛出
IndexOutOfBoundsException if start < 0, start > end or end > length().