java substring无法按预期工作

时间:2018-06-02 09:06:38

标签: java string substring

我试图在java中使用substring函数,但它一直在抛出错误,我想知道为什么?代码在逻辑上似乎很好,但为什么它会抛出这个错误

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1

我在文档子字符串中读到的内容需要2个参数

substring(whereIwantToStart,howManyCharactersToshow)

下面是我的代码

    String test = "160994";
    System.out.println(test.substring(2,1)); //output should be 09 why error?

有人可以解释我有什么问题吗?我需要解释。谢谢:))

6 个答案:

答案 0 :(得分:3)

请参阅doc

  

public String substring(int beginIndex,int endIndex)

     

返回一个新字符串,该字符串是此字符串的子字符串。子字符串从指定的beginIndex开始   延伸到索引endIndex处的字符 - 1.因此长度为   substring是endIndex-beginIndex。

您需要"160994".substring(2, 4)才能获得09

答案 1 :(得分:1)

对于您所需的输出用途 -

System.out.println(test.substring(2,4)); 

答案 2 :(得分:0)

这是java

中子字符串的格式
public String substring(int beginIndex, int endIndex)

你指定从索引2开始并在索引1结束,这就是为什么它会抛出超出范围的异常索引。

要将输出设为09,您需要

 System.out.println(test.substring(2,4));

附录 - Java文档https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#substring(int,%20int)

答案 3 :(得分:0)

结束指数应大于起始指数。要将输出设为“09”,您应该将结束索引提供为4 test.substring(2,4);

  

返回一个新字符串,该字符串是此字符串的子字符串。该
  substring从指定的beginIndex开始并扩展   到索引endIndex - 1的角色。

     

因此子串的长度为endIndex-beginIndex

StringIndexOutOfBoundsException会抛出以下情况

  1. beginIndex< 0
  2. endIndex> value.length
  3. endIndex - beginIndex< 0

答案 4 :(得分:0)

public String substring(int startIndex, int endIndex):此方法返回新的String对象,该对象包含从指定的startIndex到endIndex的给定字符串的子字符串。

让我们通过下面给出的代码了解startIndex和endIndex。

String s="hello";  
System.out.println(s.substring(0,2)); 

输出:he

注意:

  

endIndex>的startIndex

在你的情况下:在1到2之间改变

String test = "160994";
System.out.println(test.substring(2, 4)); //output should be 09

输出:09

答案 5 :(得分:0)

字符串测试=“ 160994”;

System.out.println(test.substring(2,1));

子字符串的意思是(beginIndex,endIndex)和endIndex应该大于beginIndex。您的value(09)应该位于beninIndex(起始索引)和endIndex(最后一个索引)之间。

,并且您已获取endIndex 1,所以由于您的beginIndex大于endIndex,因此会收到错误消息。

如果您想获得Ans。 09,则您必须放置endIndex 4。

行将是:-System.out.println(test.substring(2,4));