如何在不使用StringBuilder的情况下从字符串(而不是数组)中删除重复项?

时间:2013-08-23 22:27:00

标签: java string duplicate-removal

我正在使用我的程序,我需要从用户提供给我的字符串中删除重复的字符。我引用了其他问题,但他们都使用StringBuilder来删除重复项。但是,有没有办法在不使用StringBuilderSet将字符串转换为数组的情况下删除重复项?

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

例如,如果用户在happyrolling中输入结果应为hapyroling

2 个答案:

答案 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);
}