我试图在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?
有人可以解释我有什么问题吗?我需要解释。谢谢:))
答案 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
会抛出以下情况
答案 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));