您好我有以下代码:
String oriString = "0100002d0016012866590003";
String firstByte = oriString.substring(8, 2);
System.out.println(firstByte);
它抛出以下异常:
线程“main”中的异常java.lang.StringIndexOutOfBoundsException: 字符串索引超出范围:-6在java.lang.String.substring(未知 源)
我的字符串有足够的字符,超过8.但我不能做除substring(3,2)
以外的任何事情,因为它会引发上述异常。
答案 0 :(得分:2)
请检查javadocs :)
https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#substring(int,%20int)
IndexOutOfBoundsException - 如果beginIndex为负数,或者endIndex大于此String对象的长度,或者beginIndex大于endIndex。
如果为2< 8,您将获得IndexOutOfBoundsException。
答案 1 :(得分:1)
请参阅https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#substring(int,%20int)
参数适用于first index
至end index
因此,如果您想从索引8开始并获得接下来的两个字符,那么您需要提供
String firstByte = oriString.substring(8, 10);
据javadocs所说
IndexOutOfBoundsException - 如果beginIndex为负数或endIndex 大于此String对象的长度,或者beginIndex是 大于endIndex。
答案 2 :(得分:1)
正如您在javadoc中看到的,第二个字符是结束索引。这必须大于起始索引(参数1)。 所以你的陈述必须是
String firstByte = oriString.substring(8, 10);
public String substring(int beginIndex, int endIndex)
返回一个新字符串,该字符串是此字符串的子字符串。子串 从指定的beginIndex开始并延伸到at处的字符 index endIndex - 1.因此子字符串的长度是 endIndex的-的beginIndex。示例:
" hamburger" .substring(4,8)返回"敦促" "微笑" .substring(1,5) 返回"英里"参数:beginIndex - 起始索引, inclusive.endIndex - 结束索引,exclusive.Returns:指定的 substring.Throws:IndexOutOfBoundsException - 如果beginIndex是 negative或endIndex大于此String对象的长度, 或者beginIndex大于endIndex。