我正在用java做一个密码学/密码分析程序,作为我主人的家庭作业。无论如何,我使用一种方法来删除无用的空格,并使我向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());
}发布于 2012-01-04 16:47:41
您将在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));
}
}然后检查最后一个字符。
发布于 2012-01-04 16:46:39
!Character.isWhitespace(s.charAt(i + 1))中的s.charAt(i + 1)
当i == s.length() - 1时,它会失败
您可能希望使用s.replaceAll("\\s\\s+"," "),而不是重新发明轮子。
发布于 2012-01-04 16:46:34
您正在使用以下语句
Character.isWhitespace(s.charAt(i + 1)这意味着你正在访问一个字符串长度加1的字符。
https://stackoverflow.com/questions/8724104
复制相似问题