我正在尝试将关键字放入字符串缓冲区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();
}
答案 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开始。看起来这不是循环的意图。