2017-05-31 59 views
-2

我一直在線程「main」java.lang.StringIndexOutOfBoundsException:String index超出範圍:35018 並且告訴我35054個字符要大盡管我剛剛檢查了那裏有多少人,其中7000人左右,我想知道是否有人可以幫助我。這是有問題的代碼。儘管我的字符串比它給出的值長,但我得到了StringIndexOutOfBoundsException

  if (twojunglers[0].equals("hecarim")) { 
      if (twojunglers[1].equals("leesin")) { 
       String codeblock; 
       String codeblock1; 
       String codeblock2; 
       while ((codeblock = br.readLine()) != null) { 
        String makelinesintoone; 
        StringBuilder builder = new StringBuilder(); 
        while ((makelinesintoone = br.readLine()) != null){ 
         builder.append(makelinesintoone); 

        } 
        int hi = builder.indexOf("Red\">"); 
        if (hi >= 0) { 
         codeblock1 = codeblock.substring(0, hi); 
         int cutstring_ = codeblock1.indexOf("Champion\">"); 
         if (cutstring_ >= 0) { 
          codeblock2 = codeblock1.substring(0, cutstring_); 
          System.out.println(codeblock2); 
+0

*「我不斷收到StringoutofboundsException,並告訴我即使我最近剛剛檢查過有多少個字符和它的大約7000個字符,35054個字符也很大」*這個例外是告訴你索引35k對於7k字符太大長串,但你想知道爲什麼這是這種情況? – Tom

+0

這是正確的湯姆。 – Face123

+0

歡迎使用堆棧溢出。最好[創建一個最小,完整和可驗證的示例](https://stackoverflow.com/help/mcve)。至少從異常中發佈堆棧跟蹤並指出它引用的發佈代碼中的哪一行。 –

回答

0

StringIndexOutOfBoundsException是指示String對象上使用的索引或者爲負或大於String的尺寸更大的異常。

在您的實際代碼,這個問題很可能是由以下substring()調用引起的:

int hi = builder.indexOf("Red\">"); 
if (hi >= 0) { 
    codeblock1 = codeblock.substring(0, hi); 

您調用的builder變量返回hi的int indexOf()但你在codeblock調用substring(0, hi)變量。
的問題是,當你從兩種不同的讀線看重他們codeblockbuilder變量不指向同一個String

while ((codeblock = br.readLine()) != null) { 

和:

StringBuilder builder = new StringBuilder(); 
while ((makelinesintoone = br.readLine()) != null){ 
    builder.append(makelinesintoone); 

這是沒有意義的。

+0

你實際上是不正確的大衛他們沒有引用完全相同的字符串,但他們有相同的內容在字符串中。 – Face123

+0

@ Face123你能解釋一下嗎? – davidxxx

0

這個問題很直接,因爲沒有完整的解釋或所有可用的代碼。也許檢查哪些線路會給你提供問題並更新你的問題。

雖然要檢查的東西可能會節省時間。

只要確保你正在分配stringsstringscharsints沒有strings

如果您收到了一定charstring使用charAt界限的。

請更正您的問題,請填寫完整的錯誤。

相關問題