我正在使用我的程序,我需要从用户提供给我的字符串中删除重复的字符。我引用了其他问题,但他们都使用StringBuilder
来删除重复项。但是,有没有办法在不使用StringBuilder
和Set
将字符串转换为数组的情况下删除重复项?
我还没有学过这些,所以我不太了解它们。我可以得到一些帮助吗?
例如,如果用户在happyrolling
中输入结果应为hapyroling
。
答案 0 :(得分:4)
您的示例中似乎要删除重复的字符(不是字)。
您可以使用正则表达式查找重复项并将其删除:
str = str.replaceAll("(.)\\1+", "$1");
此正则表达式捕获每个字符,但仅通过使用对捕获组的后向引用来匹配后跟相同字符。替换是捕获的字符,因此例如“xx”被替换为“x”
答案 1 :(得分:0)
不知何故,您需要将字符串转换为字符数组。 String在Java中是不可变的,因此如果要在String中执行任何类型的操作,您必须将其转换为charArray,或者必须使用StringBuilder来创建新的String。 您可以使用hashmap跟踪使用的字符。
public String removeDuplicates(String str){
char[] array = str.toCharArray();
char ch;
int k = 0;
HashMap<Character, Integer> hMap = new HashMap();
for(int i = 0; i < str.length(); i++){
ch = array[i];
if(hMap.get(ch) == null){
array[k++] = ch;
hMap.put(ch, 1);
}
}
return new String(array, 0, k);
}