Java子串正在将我的正索引切换为负索引

时间:2011-10-08 11:08:55

标签: java html string swing jtextpane

我得出结论HTML启用JTextPanes不支持自动换行。所以我试图提供一种家庭酿造方法。一旦完成,我会将它发布在网上。我可能没有最好的技术,但它应该在完成后工作。我的问题是由于某些疯狂(非常令人讨厌)的原因,当我将索引传递给我的substring命令时,它将使用相同的值切换实际值但是在否定时抛出java.lang.StringIndexOutOfBoundsException。但是当变量被发送到substring命令时,肯定是肯定的。当我将变量替换为值时,它可以正常工作。我将不胜感激任何帮助。我将包括这个源。

    String wordWrap( String oldtxt )    {

        int ishere = 0;         // the current index
        int charlen = 0;        // The current length of the current line
        int beginint = 0;       // Where the text between tags begins
        int endint = 0;         // Where the text between tags ends
        String tempstr = "";    // Where the text is 
        String newoldtxt = "";  // to work around the damned oc error
        String newtxt = "";     // The new text being built
        String divystr = "";    // Temp variable to hold a partial string
        Boolean a = true;       // Needed as temp storage variable

        newoldtxt = oldtxt;

        while( true ) {

            endint = oldtxt.indexOf( "<", endint );

            if( endint == -1 )  {

                endint = oldtxt.length();
                a = false;
            }


            ishere = endint;
            tempstr = oldtxt.substring( beginint, endint );             // Save the text in a temp string

            while( ishere > endint )
            if( tempstr.length() > ( 22 - charlen ))  {                 // Testing for a complete line

//              newtxt += tempstr.substring( ishere, 22 - charlen );        // If a line is complete a line is printed to the pane
                newtxt += tempstr.substring( ishere, 22 );      // If a line is complete a line is printed to the pane
                ishere += 22 - charlen;                                     // Bumping the current index along
                charlen = 0;
                newtxt += "<br />";                                         // Attach a line break
                if( ishere >= tempstr.length() && a == false )
                return newtxt;

            } else if( tempstr.length() < ( 22 - charlen) )  {          // Checking to see if there are fewer then 22 chars in the string

                divystr = tempstr.substring( ishere, tempstr.length() );    // Dump the rest of the substring into the rebuilt string
                newtxt += divystr;                                          // Assign the remaining tempstr characters to newtxt
                charlen += divystr.length();                                // Add stray chars to charlen

                if( a == false )
                    return newtxt;
            }

            beginint = oldtxt.indexOf( ">", ( endint ) );                       // Locate end bracke
            newtxt += oldtxt.substring( beginint, endint );             // Add tag to newtxt
        }
    }
}

1 个答案:

答案 0 :(得分:1)

当你进行最后的substring调用时,endint的值为0,大于起始索引,导致StringIndexOutOfBoundsException。

// endint is larger than beginint here
newtxt += oldtxt.substring( beginint, endint );