java中两个String字符串比较去重

简介: java中两个String字符串比较去重

假设有两个字符串

String qc1 = "张三,李四,赵二,谢大脚,刘能";

String qc2 = "谢广坤,谢大脚,张三";

如何去重,只留下qc2中不包含qc1中的字段呢,这时候要用到indexOf()

java.lang.String.indexOf(String str)

indexOf() 返回此字符串中指定子字符串第一次出现的索引,如果没有的话返回-1;

写法一(String字符串直接拼接)不推荐

String qc1 = "张三,李四,赵二,谢大脚,刘能";
    String qc2 = "谢广坤,谢大脚,张三";
    String qc3 = "";
    String[] arrqc1 = qc1.split(",");
    String[] arrqc2 = qc2.split(",");
    for(int i = 0;i <arrqc1.length;i++) {
      qc2.indexOf(arrqc1[i]);
      if (qc2.indexOf(arrqc1[i]) == -1) {
        qc3 +=  arrqc1[i] + ",";
      }
    }
    //去掉最后一个  ','
    qc3 = qc3.toString().substring(0,qc3.length()-1);
      System.out.println("qu3= "+qc3);

打印的结果是:

写法二(利用StringBuilder推荐

String qc1 = "张三,李四,赵二,谢大脚,刘能";
    String qc2 = "谢广坤,谢大脚,张三";
      StringBuilder sBuilder2 = new StringBuilder();
      String aString = "";
      String[] array1 = qc1.split(",");
      for (int i = 0; i < array1.length; i++) {
          if (qc2.indexOf(array1[i]) == -1) {
              sBuilder2.append("'").append(array1[i]).append("'").append(",");
          }
      }
      // 去除最后一个","
      if (sBuilder2.toString().endsWith(",")) {
        aString = sBuilder2.toString().substring(0,sBuilder2.length()-1);
      }
      System.out.println("sBuilder2== "+aString);

打印结果:

但是呢,我们一般拒绝使用方法一(String)进行拼接,为什么?因为影响性能

String是字符串常量的引用,String += String其实就是重新new了一个新的临时对象。

所以,拼接字符串不能使用String进行拼接,要使用StringBuilder或者StringBuffer

既然说到这了,不妨再说一下String 、StringBuffer 、StringBuilder三者的区别

1、修改String对象的值,内存地址会发生改变

2、StringBuffer和StringBuilder的值可以被多次修改,但并不能创建新的对象,即内存地址不变

3、StringBuffer是线程安全的 StringBuilder是线程不安全的

4、StringBuffer的执行速度要比StringBuilder快

5、StringBuffer和StringBuilder的默认容量长度为16。

6、 如果在声明StringBuffer对象的同时,通过构造方法进行value[]初始化(即给变量赋值), 则容量长度是是(value[]的长度+16)

7、 如果调用append方法拼接字符串,字符串的长度超出了容量长度,则对容量长度进行扩容,扩容大小为(原长度

相关文章
|
4天前
|
Java 索引
String字符串常用函数以及示例 JAVA基础
String字符串常用函数以及示例 JAVA基础
|
5天前
|
Java 编译器 ice
【Java开发指南 | 第十五篇】Java Character 类、String 类
【Java开发指南 | 第十五篇】Java Character 类、String 类
24 1
|
3天前
|
存储 安全 Java
Java中的这些String特性可能需要了解下
Java中的String特性你知道哪些?虽然String很常见,通过源码可以看到String的值传递、字符串表和不可变性。本文基于JDK17说明。
9 1
|
5天前
|
Java
Java获取字符串最后一位
【5月更文挑战第9天】Java获取字符串最后一位
38 5
|
3天前
|
存储 Java
Java基础复习(DayThree):字符串基础与StringBuffer、StringBuilder源码研究
Java基础复习(DayThree):字符串基础与StringBuffer、StringBuilder源码研究
Java基础复习(DayThree):字符串基础与StringBuffer、StringBuilder源码研究
|
4天前
|
Java
Java中两个字符串进行大小比较
Java中两个字符串进行大小比较
18 5
|
4天前
|
Java
Java String 避免空指针的方法
Java String 避免空指针的方法
5 0
|
5天前
|
存储 Java 索引
【JAVA基础篇教学】第十一篇:Java中字符串操作详解
【JAVA基础篇教学】第十一篇:Java中字符串操作详解
|
5天前
|
Java
代码实例演示Java字符串与输入流互转
代码实例演示Java字符串与输入流互转
|
5天前
|
安全 Java 编译器
Java中String、StringBuilder和StringBuffer的区别
Java中String、StringBuilder和StringBuffer的区别
10 1