簡體   English   中英

如何不使用StringBuilder從字符串(而不是數組)中刪除重復項?

[英]How to remove duplicates from string (not array) without using StringBuilder?

我正在使用我的程序,我需要從用戶給我的字符串中刪除重復的字符。 我引用了其他問題,但是它們都使用StringBuilder刪除重復項。 但是,有沒有什么方法可以使用StringBuilderSet刪除重復項而不將字符串轉換為數組?

我還沒有學過,所以我不太了解它們。 我可以幫忙嗎?

例如,如果用戶鍵入happyrolling則結果應為hapyroling

從您的示例看來,您想要刪除重復的字符 (而不是word )。

您可以使用正則表達式找到重復項並將其刪除:

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

此正則表達式捕獲每個字符,但僅在后面有相同字​​符時才使用對捕獲的組的反向引用進行匹配。 替換是捕獲的字符,因此例如“ xx”被替換為“ x”

您需要以某種方式將字符串轉換為字符數組。 String在Java中是不可變的,因此,如果要在String中執行任何類型的操作,則必須將其轉換為charArray,或者必須使用StringBuilder創建新的String。 您可以使用哈希圖跟蹤使用的字符。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM