2016-12-06 56 views
0

我在2個月前開始學習Java並陷入了這個問題。有誰能給我這個幫助嗎?線程「main」中的異常java.lang.StringIndexOutOfBoundsException:字符串索引超出範圍:52

的問題:

給定一個字符串,在原字符串中每個數字,代替手指與後面的字符的許多事件。

所以字符串「a3tx2z」會產生「attttxzzz」。

我的代碼:

@param str 
    @return blown up string 
    public static String blowup(String str) { 
    StringBuilder stri = new StringBuilder(str); 
    for(int i = 0; i<stri.length();i++){ 
     if(Character.isDigit(stri.charAt(i))){ 
      int a = stri.charAt(i), 
       c = a - 1; 
      char b = str.charAt(a+1);   
      while (a >0){ 
       stri.insert(c, b); 
       a --; 
      } 
     } 
    } 
    str = stri.toString(); 
    return str; // TODO ADD YOUR CODE HERE 
} 

例外:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 52 
at java.lang.String.charAt(String.java:658) 
at HelloWorld.blowup(HelloWorld.java:15) 
at HelloWorld.main(HelloWorld.java:6) 
+1

在代碼中,你是不是字符轉換爲數字。'INT A = stri.charAt(我)'將返回字符代碼,而不是麻木呃。嘗試'int a =(stri.charAt(i) - '0')' – BretC

回答

0

如上所述,你得到你的stri的和str'搞得一團糟秒且不轉換號碼int小號...

public static String blowup(String str) { 
    StringBuilder stri = new StringBuilder(str); 
    for (int i = 0; i < str.length(); i++) { 
     if (Character.isDigit(stri.charAt(i))) { 
      int a = str.charAt(i) - '0', 
        c = a - 1; 

      char b = str.charAt(i + 1); 
      while (a > 0) { 
       stri.insert(c, b); 
       a--; 
      } 
     } 
    } 
    str = stri.toString(); 
    return str; // TODO ADD YOUR CODE HERE 
} 

(這仍然不能正常工作,但它應該有所幫助...)

0

簡而言之:當您嘗試獲取stri.charAt(i)作爲int時,它不是數值 - 它是char的ASCII碼。即 「AB3C」 .charAt(2)不是3,但51相反,你需要:

int a= Integer.valueOf(stri.substring(i,i+1)); 

BTW:你確定 「a3tx2z」 產量 「attttxzzz」 不atttxzz」

+0

感謝您的幫助。我確信「a3tx2z」產生「attttxzzz」,另一個例子「2x3Z」產生「xxxZZZZ」。 –

+0

np。這只是不合邏輯:定義3噸,但得到4 tttt ...但要求是要求:) – Vadim

0
public class Hello{ 
    public static void main(String ...args){ 
    String str = "a3tx2z"; 
    StringBuilder stri = new StringBuilder(); 
    for(int i = 0; i<str.length();i++){ 
     if(Character.isDigit(str.charAt(i))){ 
      int a = Character.getNumericValue(str.charAt(i)); 
      char b = str.charAt(i+1); 
      if(a == 0){ 
      i++; 
      }else{ 
      for(int j = 0;j<a-1;j++){ 
       stri.append(b); 
      } 
      } 
     }else{ 
      stri.append(str.charAt(i)); 
     } 
    } 
    str = stri.toString(); 
    System.out.println(str); 
    } 
} 

輸出:: atttxzz

也許這會有所幫助....

+0

感謝您的幫助。通過閱讀你的代碼,我想出瞭如何解決這個問題! –

相關問題