我正在使用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());
}
答案 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);