java子串的奇怪问题

时间:2016-09-23 05:26:48

标签: java

您好我有以下代码:

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)以外的任何事情,因为它会引发上述异常。

3 个答案:

答案 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 indexend 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。