【问题标题】:get a character from a string从字符串中获取一个字符
【发布时间】:2013-03-01 15:19:03
【问题描述】:

我有这个字符串:

String code="abc";

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

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

此代码返回错误

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

但我不知道为什么?

【问题讨论】:

    标签: java android string substring


    【解决方案1】:

    第二个参数不是长度,是an end index

      String#substring(int beginIndex, int endIndex) 
    

    【讨论】:

      【解决方案2】:

      您需要阅读the documentation for substring - 第二个参数不是长度,它是结束索引(不包括)。

      参数:
      beginIndex - 起始索引,包含。
      endIndex - 结束索引,不包含。

      如有疑问,请阅读文档...

      还要注意,如果你只是想获取最后一个字符,你可以只使用单参数重载,它返回一个从给定起点到字符串结尾的子字符串:

      String lastCharacter = text.substring(text.length() - 1);
      

      或者您可以将其作为单个字符来获取:

      char lastCharacter = text.charAt(text.length() - 1);
      

      【讨论】:

      • @Jon Skeet:但是当我这样做时:substring(2,1);我什么都没有!!
      • @FarhadShirzad:不,你得到一个例外......如果你使用substring(2, 3),你会得到最后一个字符。
      • @FarhadShirzad 您的开始索引不能在结束索引之后。你永远不会得到任何东西(除了明显的例外)。该方法基本上是子字符串(开始,结束)。 2 在 1 之前吗?
      • @FarhadShirzad 你也可以使用 String.charAt(position);从给定的字符串中获取单个字符。
      【解决方案3】:

      索引从0开始,你可以试试

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

      【讨论】:

      • 不会提取最后一个字符。 OP刚刚误解了第二个参数。
      【解决方案4】:

      我认为 substring 需要一个开始索引或一个开始索引和结束索引作为参数:

      http://docs.oracle.com/javase/6/docs/api/java/lang/String.html

      你已经给它一个大于结束索引的开始索引,因此它会变得混乱,因为返回的长度是负数。交换 1 和 2。

      【讨论】:

      • 交换 1 和 2 将返回 b。结束索引字符被排除在外。
      • 是的。我更多的回应是缺乏对人们纠正自己所期望的功能参数的理解,而不是提供一个准确的解决方案。抱歉,下次我会遵守规则的。
      【解决方案5】:

      使用也可以做到这一点。

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

      【讨论】:

        【解决方案6】:

        上面的人已经充分回答了您的问题,但只是一些关于阅读 API 的提示。

        方法通常以单词 public 开头,然后包括返回类型......这就是将返回的数据类型。如果没有任何预期返回是无效的。

        然后是方法的名称和两个括号。

        括号之间是它接受的参数类型。

        使用这种特殊方法,它接受两个整数。这些有助于保留您想要保留多少字符串的索引

        索引是一个需要理解的重要概念,很难用语言描述它是如何工作的,但查看 api 描述列表中的示例会有所帮助。

        index-1 通常表示从 0 开始计数,因此在字符串“Hello World”中,H 的索引为 0,d 的索引为 10。注意只有 9 个字母,但我们仍然必须将空格作为字符包含在内,因此它是索引本例为 5。

        重要的是要注意 api 提到的参数描述中不包括和包括。这只是意味着返回的字符串将包含由第一个参数索引的字母,但不包含由第二个参数索引的字母。

        如果你需要做的只是提取字符串中的最后一个字母,不管字符串有多长,一个简单的解决方案是

        stringName.substring(stringName.length()-1); 
        

        【讨论】:

        • 感谢您的完美言辞...谢谢。我解决了我的问题
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-05-21
        • 1970-01-01
        • 1970-01-01
        • 2022-09-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多