从字符串中获取一个字符

时间:2013-03-13 15:29:50

标签: java android string substring

我有这个字符串:

String code="abc";

我想通过substring方法从此字符串中提取“c”,但它不起作用:

String code="abc";
String getsmscode=code.substring(2,1);

此代码返回错误

java.lang.StringIndexOutOfBoundsException: length=3; regionStart=2; regionLength=-1

但我不知道为什么?

6 个答案:

答案 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().