【问题标题】:How to remove duplicates from string (not array) without using StringBuilder?如何在不使用 StringBuilder 的情况下从字符串(不是数组)中删除重复项?
【发布时间】:2023-03-09 16:56:01
【问题描述】:

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

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

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

【问题讨论】:

  • 重复的单词或重复的字符??
  • 你的例子很不幸,因为所有的字母以后都不会重复。如果重复出现在字符串之后立即或之后任何地方,是否会删除它们?
  • 您最终必须将字符串分解为字符才能将其处理为字符串实际上只不过是字符的集合
  • 哦,我的意思是我想删除 word 中的重复字符。因此,如果不分解字符串中的每个字符,就无法做到这一点。我的理解正确吗?

标签: java string duplicate-removal


【解决方案1】:

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

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

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

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

【讨论】:

  • "aba" 这样的东西呢,预期的输出不是"ab"吗?
  • @arshajii 我不这么认为,但你是对的——所有字母都是独一无二的——这是一个不好的例子。如果是这种情况,也可以使用 replaceAll()
【解决方案2】:

您需要以某种方式将字符串转换为字符数组。 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);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-14
    • 1970-01-01
    • 2021-08-29
    • 1970-01-01
    • 2011-10-20
    • 1970-01-01
    • 2011-05-22
    • 2020-12-30
    相关资源
    最近更新 更多