关键字到alpha比较的界限错误

时间:2014-05-18 21:47:08

标签: java string replace keyword indexoutofboundsexception

我正在尝试将关键字放入字符串缓冲区alpha并省略重复的字符。我在关键字到alpha比较时遇到了一个超出范围的错误。

public String putKeyword(String keyword)
{
    StringBuffer alpha = new StringBuffer();

    alpha.append(keyword.charAt(0));
    for(int i = 1; i < keyword.length(); i++){
        boolean found = false;
        for(int j = 0; j < i; j++){
            if(keyword.charAt(i) == alpha.charAt(j))
                found = true;
            if(found = false)
                alpha.append(keyword.charAt(i));
        }

    }
    return alphabet = alpha.toString();
}

3 个答案:

答案 0 :(得分:2)

想象一下这种情况:

keyword = "aaaaa"'

让我们遍历您的算法:

alpha = "a"

请注意alpha

的内容
i=1, j=0  

keyword.charAt(1)== alpha.charAt(0)
a == a
alpha =&#34; a&#34;

i=2, j=0  

keyword.charAt(2)== alpha.charAt(0)
a == a
alpha =&#34; a&#34;

i=2, j=1  

由于alpha只有1个char,因此您尝试访问第2个元素时会抛出异常。

解决方案:使用HashSet保持状态。

public String putKeyword(String keyword) {
    StringBuffer alpha = new StringBuffer();
    Set<Character> seenChars = new HashSet<String>();

    for (int i = 0; i < keyword.length(); i++) {
        char c = keyword.charAt(i);

        if (!seenChars.contains(c)) {
            seenChars.add(c);
            alpha.append(c);
        }
    }

    return alpha.toString();
}

答案 1 :(得分:1)

尝试:

public String putKeyword(String keyword)
{
    StringBuffer alpha = new StringBuffer();

    alpha.append(keyword.charAt(0));
    for(int i = 1; i < keyword.length(); i++){
        boolean found = false;
        for(int j = 0; j < alpha.length(); j++){
            if(keyword.charAt(i) == alpha.charAt(j))
                found = true;
        }
        if(found == false)
            alpha.append(keyword.charAt(i));
    }
    return alphabet = alpha.toString();
}

分享并享受。

答案 2 :(得分:0)

请注意,数组索引从零开始,但是你的第一个for循环开始看1而第二个从0开始。看起来这不是循环的意图。