2016-09-23 67 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