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