2016-09-23 44 views
-1

嗨,我有以下代码。java子串的奇怪问题

String oriString = "0100002d0016012866590003"; 

     String firstByte = oriString.substring(8, 2); 
     System.out.println(firstByte); 

异常在线程 “主” java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:-6 在java.lang.String.substring(未知来源)

我的字符串具有足够字符更比8我不能做任何事情比子字符串(3,2)它开始给我错误?

回答

1

正如您在javadoc中看到的,第二个字符是结束索引。这必须大于开始索引(参数1)。 所以,你的声明必须

String firstByte = oriString.substring(8, 10); 

公共字符串的子串(INT的beginIndex, INT endIndex的)

返回一个新字符串,它是此字符串的一个子。子字符串 从指定的beginIndex开始,并扩展到 index endIndex - 1的字符。因此子字符串的长度为 endIndex-beginIndex。实例:

“汉堡包” .substring(4,8)返回 “冲动”, “微笑” .substring(1,5) 返回 “一英里” 参数:的beginIndex - 开始索引, inclusive.endIndex - 结束索引,exclusive.Returns:指定的 substring.Throws:IndexOutOfBoundsException - 如果beginIndex为 为负数,或者endIndex大于此String对象的长度,则为 或beginIndex大于endIndex。

+0

谢谢你是我的错误,我错误地读它 – user5313398

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它说

IndexOutOf BoundsException - 如果beginIndex为负数,或者endIndex 大于此String对象的长度,或者beginIndex为 大于endIndex。

+0

那么我需要添加结束索引呢? – user5313398

+0

你需要或者使用'substring'开始只索引(它会读到字符串的末尾)从索引使用,结束索引,其中结束索引应该大于开始索引 –

+0

谢谢你是我的错误,我读了它错了 – user5313398