StringIndexOutOfBoundsException,从字符串方法中删除空格

时间:2012-01-04 08:44:05

标签: java string swing stringbuilder

我正在使用java作为我的主人的家庭作业制作加密/密码分析程序。无论如何,我使用一种方法来删除无用的空格,并使String i显示到JTextArea。这个方法非常适合小文本,但是当我使用更大的文本(从.txt文件加载)时,它给了我一个StringIndexOutOfBoundsException。有人可以帮忙吗? 提前谢谢。

这是方法:

public void Data(String s) {
    System.out.print("Analysis" + "\n" + s);
    jTextArea1.setText(s);
    StringBuilder buf = new StringBuilder();
    for (int i = 0; i < s.length(); i++) {
        if (!Character.isWhitespace(s.charAt(i))) {
            buf.append(s.charAt(i));
        } else if (Character.isWhitespace(s.charAt(i)) &&   !Character.isWhitespace(s.charAt(i + 1))) {
            buf.append(s.charAt(i));
        }
    }
    System.out.println(buf.toString() + "\n" + "from buf");
    jTextArea1.setText(buf.toString());
}

4 个答案:

答案 0 :(得分:1)

s.charAt(i + 1)

中的

!Character.isWhitespace(s.charAt(i + 1))

i == s.length() - 1

时失败

您可能希望使用s.replaceAll("\\s\\s+"," ")而不是重新发明轮子。

答案 1 :(得分:1)

您在for循环中前进到s.length()但在第二个if语句中访问s.charAt(i + 1)。尽量只到s.length() - 1

for (int i = 0; i < s.length() - 1; i++) {
    if (!Character.isWhitespace(s.charAt(i))) {
        buf.append(s.charAt(i));
    } else if (Character.isWhitespace(s.charAt(i)) &&   !Character.isWhitespace(s.charAt(i + 1))) {
        buf.append(s.charAt(i));
    }
}

然后检查最后一个字符。

答案 2 :(得分:0)

您正在使用此声明

Character.isWhitespace(s.charAt(i + 1)

表示您正在访问字符串长度加1的字符。

答案 3 :(得分:0)

hi i hope you can use the below one, instead the above

//StringBuilder buf = new StringBuilder();
/*  These lines are not needed 
   for (int i = 0; i < s.length(); i++) {
        if (!Character.isWhitespace(s.charAt(i))) {
            buf.append(s.charAt(i));
        } else if (Character.isWhitespace(s.charAt(i)) &&   !Character.isWhitespace(s.charAt(i + 1))) {
            buf.append(s.charAt(i));
        }`enter code here`
    }
*/
s = s.replaceAll("\\s+"," ");
// Whenever you print the object(reference) toString() method is called by default. so no need to call explicitly
//    System.out.println(buf.toString() + "\n" + "from s");
    System.out.println(s + "\n" + "from buf");
//    jTextArea1.setText(s);
    jTextArea1.setText(s);