2017-05-15 14 views
-2

ISSUE已解決,代碼未更新 我已經解決了這個代碼在一位有幫助的用戶的幫助下遇到的問題。下面的代碼沒有更新。Java - 如何修改我的replacePlaceholder方法,使其不再有我的瘋狂libs程序的索引超出界限錯誤?

// replacePlaceholder method 
    private String replacePlaceholder(String template, String placeholder, String replacement) 
    { 
     String newTemplate = ""; 
     int count = 0; 
     for(int i = 0; i < template.length(); i++) 
     { 
      if(count == 0 && template.substring(i, i + placeholder.length()).equals(placeholder)) 
      { 
       newTemplate += replacement; 
       count++; 
      } 
      else if(count != 1) 
      { 
       newTemplate += template.substring(i, i + 1); 
      } 
     } 
     return newTemplate; 
    } 
+0

經過一個調試器,你會發現自己 –

+0

的消息告訴你,你嘗試在字符串中使用無效的索引值。只需**打印**字符串以及您想要使用的索引。然後修正出現諸如-1 ;-)等數字的邏輯......或通過查看[mcve]來改善您的問題。 – GhostCat

+0

這個方法應該做什麼,到底是什麼?如果您只需要替換另一個字符串中的子字符串,則有'replace(String placeholder,String replacement)'方法。 – nonzaprej

回答

0

正如指出的意見,你應該只使用String.replace(String, String)String.replaceAll(String, String),而不是你自己寫吧。您當前的實施有幾個問題:

  • template.substring(i, placeholder.length() + 1)應該是template.substring(i, i + placeholder.length())。否則,您的beginIndex可能大於endIndex
  • 如果模板以半個佔位符結尾,則substring將失敗,因爲endIndex太大。
  • aaa[placeholder]aaa將變成aaareplacementplaceholder]aaa與您目前的代碼,因爲你不會跳過佔位符的其餘部分。
  • 第二個佔位符將不會被替換,因爲您說count++但不會重置它,使您的if始終轉到else
  • 可能更
+0

解決除「aaa [佔位符] aaa將變成aaareplacementplaceholder] aaa與您當前的代碼之外的所有問題,因爲您不會跳過佔位符的其餘部分。」另外,我只需要一次替換一個佔位符,這就是爲什麼我「計數」永遠不會被重置。 – mini23

+0

@ mini23我明白了。也許你可以調用'newTemplate + = template.substring(i + placeHolder.length());打破;'在添加替換之後。那麼你不需要''數''了。 –

+0

明白了。我仍然堅持如何解決這個問題,而不是取代佔位符的其餘部分。 – mini23