Java字符串去重的几种实现


Java字符串去重的几种实现

去除字符串中出现的重复字符,保留重复第一次出现的字符.

例:

输入:"我爱北京天安门,天安门上太阳升"

输出:"我爱北京天安门,上太阳升"

提示:以下是本篇文章正文内容,下面案例可供参考

一、StringBuilder类

利用StringBuilder类的可变性,将去重之后的字符append进new的StringBuilder中
核心思路:用循环遍历字符串中的单个字符,利用String类中的两个方法:

  • indexOf(): 返回指定字符第一次出现的索引(下标)
  • lastIndexOf(): 返回指定字符最后一次出现的索引(下标)

当第一次与最后一次的索引相等时,即表明当前字符没有出现重复;如果不相等,就是出现重复,将重复字符第一次出现的索引与当前循环的索引相比较,如果相等就表示当前字符就是重复字符第一次出现的位置

indexOf()方法
lastIndexOf()方法
代码如下:

import java.util.Scanner;

public class Demo {
    //过滤重复字符串的方法
    public static String filter(String s) {
        //非空判断
        if (s == null) {
            return null;
        }
        StringBuilder sbd = new StringBuilder();//创建一个空的StringBuilder
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if (s.indexOf(c) == s.lastIndexOf(c)) {//第一次出现的下标跟最后一次相等,表示当前字符没有出现重复,直接添加进StringBuilder中
                sbd.append(c);
            } else {//出现重复
                if (s.indexOf(c) == i) {//如果重复出现的字符的位置等于当先字符的索引值,即表示当前字符为重复字符出现的第一次,将其加入StringBuilder中
                    sbd.append(c);
                }
            }
        }
        return sbd.toString();
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一串字符串:");
        String s = sc.next();
        System.out.println("过滤重复字符之后的字符串:");
        System.out.println(filter(s));
    }
}

运行结果:
运行结果运行结果

二、HashSet集合

核心思路:利用HashSet的add()方法,如果元素存在,则返回false;只有不存在才返回true

代码如下(示例):

import java.util.HashSet;
import java.util.Scanner;

public class Test1 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一串字符串:");
        String s = sc.next();
        char[] c = s.toCharArray();//将字符串转为字符数组
        HashSet set = new HashSet();
        StringBuilder sbd = new StringBuilder();
        //遍历字符数组
        for (int i = 0; i < c.length; i++) {
            //利用HashSet的add()方法,他返回的是一个布尔值,添加成功会返回true
            if (set.add(c[i])){
                sbd.append(c[i]);
            }
        }
        System.out.println(sbd);
    }
}

总结

以上就是今天要讲的内容,本文简单介绍了几种字符串去重的方法。

如果本文对你理解有帮助,请给一个赞吧,这会是我最大的动力~


版权声明:本文为qq_45145768原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。