首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >StringIndexOutOfBoundsException,则从字符串方法中删除空格

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

Stack Overflow用户
提问于 2012-01-04 16:44:05
回答 4查看 343关注 0票数 2

我正在用java做一个密码学/密码分析程序,作为我主人的家庭作业。无论如何,我使用一种方法来删除无用的空格,并使我向JTextArea显示的字符串正确。这个方法对于小文本很有用,但当我使用大文本(从.txt文件加载)时,它会给我一个StringIndexOutOfBoundsException。有人能帮上忙吗?提前谢谢。

方法如下:

代码语言:javascript
复制
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());
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-01-04 16:47:41

您将在for循环中访问s.length(),但在第二个if语句中访问s.charAt(i + 1)。尝试只访问s.length() - 1

代码语言:javascript
复制
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));
    }
}

然后检查最后一个字符。

票数 1
EN

Stack Overflow用户

发布于 2012-01-04 16:46:39

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

i == s.length() - 1时,它会失败

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

票数 1
EN

Stack Overflow用户

发布于 2012-01-04 16:46:34

您正在使用以下语句

代码语言:javascript
复制
Character.isWhitespace(s.charAt(i + 1)

这意味着你正在访问一个字符串长度加1的字符。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8724104

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档