2

我正在使用我的程序,我需要从用户给我的字符串中删除重复的字符。我引用了其他问题,但它们都StringBuilder用于删除重复项。但是,有什么方法可以在不将字符串转换为数组的情况下使用StringBuilderand删除重复项Set

我还没有学过这些,所以我不太了解它们。我能得到一些帮助吗?

例如,如果用户输入happyrolling的结果应该是hapyroling.

4

2 回答 2

4

从您的示例看来,您想删除重复的字符(而不是words)。

您可以使用正则表达式查找重复项并将其删除:

str = str.replaceAll("(.)\\1+", "$1");

此正则表达式捕获每个字符,但仅在通过使用对捕获组的反向引用后跟相同字符时匹配。替换是捕获的字符,例如“xx”被“x”替换

于 2013-08-23T22:33:05.430 回答
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);
}
于 2013-08-24T03:17:58.113 回答