我是Java的新手,我正在尝试创建一个方法,允许我删除字符串中的重复字符并创建一个新字符串,同一个字符的所有连续出现都变成一个字符。例如,字符串“fffggghhh”将返回“fgh”。我在下面提供了我的代码但是我收到的索引超出范围错误,我输入的字符串长度。例如,当测试此方法并输入“AA”作为我的字符串时,我收到超出范围2错误的索引。
对于我做错的任何建议都将不胜感激。 谢谢,
public String DuplicatesTEST(String s){
StringBuilder result = new StringBuilder();
for (int i = 1; i <= s.length(); i++){
char curr = s.charAt(i);
char prev = s.charAt(0);
if (curr != prev ) {result.append(prev);}
else if (curr == prev)
prev = curr; }
return result.toString();
}
答案 0 :(得分:2)
数据结构的行为'Set'不包含重复项,因此请使用Set删除重复项 尝试这样的事情:
public String DuplicatesTEST(String s) {
StringBuilder result = new StringBuilder();
if(s != null && !s.isEmpty()) {
char first = s.charAt(0);
for (int i = 1; i < s.length(); i++) {
if(first != s.charAt(i)){
result.append(first);
first = s.charAt(i);
}
}
result.append(first);
}
return result.toString();
}
为“fffggghhhff”输入此返回“fgh”
如果你想删除上面有一个块的重复项,那么我对你的实现做了一些小改动
time.sleep
为“fffggghhhff”输入此返回“fghf”
答案 1 :(得分:1)
您可以将您的方法转换为递归并使用regexp。这大大简化了您的代码。
public static String removeDuplicates(String str) {
if (str.equals(str = str.replaceAll("(.)\\1", "$1")))
return str;
else
return removeDuplicates(str);
}
public static void main(String[] args) {
System.out.println(removeDuplicates("aaaaaaa")); // a
System.out.println(removeDuplicates("fffggghhh")); // fgh
System.out.println(removeDuplicates("fffggghhhff")); // fghf
}
说明:
(.)\\1
- 后跟相同字符的任何字符;
$1
- 替换为 1st group 中的一个字符,即相同的字符;str = str.replaceAll(...)
- 删除所有重复项并替换当前字符串;str.equals(...)
- 检查当前字符串与自身的相等,但没有重复项。答案 2 :(得分:0)
字符串是基于0的索引。
根据您的输入,如果重复的字符是连续的顺序,那么您可以将输入字符串中的第一个字符存储到结果StringBuilder中。
此外,在您的代码中,prev始终为0,这是错误的。你也需要保持增量。
以下是您的代码的固定版本:
public static String DuplicatesTEST(String s) {
StringBuilder result = new StringBuilder();
result.append(s.charAt(0));
for (int i = 1; i < s.length(); i++) {
char prev = s.charAt(i);
char curr = s.charAt(i - 1);
if (curr != prev || i == 0) {
result.append(prev);
}
else if (curr == prev) {
prev = curr;
}
}
return result.toString();
}
答案 3 :(得分:-1)
public static void main(String[] args) {
System.out.println(DuplicatesTEST("ffggghhh"));
}
public static String DuplicatesTEST(String s) {
StringBuilder result = new StringBuilder();
Character curr = null;
for (int i = 1; i <= s.length(); i++) {
char prev = s.charAt(i-1);
if (curr == null || prev != curr.charValue()){
result.append(prev);
curr = prev;
}
}
return result.toString();
}