线程" main"中的例外情况java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:52

时间:2016-12-06 17:34:35

标签: java string exception int stringbuilder

我2个月前开始学习Java并且遇到了这个问题。请问有人能给我这方面的帮助吗?

问题:

  

给定一个字符串,对于原始字符串中的每个数字,将该数字替换为后续字符的多次出现。

     

所以字符串" 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)

3 个答案:

答案 0 :(得分:0)

如上所述,您的stristr被混淆了,而不是将数字转换为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
}

(顺便说一句,这仍然无法正常工作,但它应该有帮助......)

答案 1 :(得分:0)

简而言之:当你试图将stri.charAt(i)作为int而不是数值时 - 它是char的ASCII码。即&#34; ab3c&#34; .charAt(2)不是3而是51.相反,你需要:

int a= Integer.valueOf(stri.substring(i,i+1));
顺便说一句:你确定&#34; a3tx2z&#34;收益&#34; attttxzzz&#34;不要atttxzz&#34; ?

答案 2 :(得分:0)

Eigen::SparseMatrix<float>

输出:: atttxzz

这可能有帮助......