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方法拼接字符串,字符串的长度超出了容量长度,则对容量长度进行扩容,扩容大小为(原长度

相关文章
string(字符串)
在 Lua 中,字符串可以用双引号或单引号定义,如 `string1 = &quot;this is string1&quot;` 和 `string2 = &#39;this is string2&#39;`。多行字符串可由两个方括号包围,例如 `html` 变量所示,它包含了一个 HTML 片段。Lua 会尝试将数字字符串转换为数值进行算术运算,但混合字符串和数字可能导致错误,如 `&quot;error&quot; + 1`。
|
2天前
|
传感器 数据采集 网络协议
Java串口通信:从十六进制字符串到字节数组的正确转换与发送
Java串口通信:从十六进制字符串到字节数组的正确转换与发送
18 4
|
4天前
|
Java
在Java中,如何将字符串转换为浮点数?
【4月更文挑战第30天】在Java中,如何将字符串转换为浮点数?
10 0
|
4天前
|
Java
Java String类型转换成Date日期类型
Java String类型转换成Date日期类型
|
5天前
|
Java 索引
Java String应用与开发
Java String应用与开发
13 0
|
5天前
|
存储 Java C语言
【Java探索之旅】数据类型与变量 浮点型,字符型,布尔型,字符串型
【Java探索之旅】数据类型与变量 浮点型,字符型,布尔型,字符串型
13 0
|
5天前
|
Java
JAVA刷题之字符串的一些个人思路
JAVA刷题之字符串的一些个人思路
|
6天前
|
存储 安全 Java
聊聊Java中的常用类String
聊聊Java中的常用类String
11 0
|
9天前
Swagger2异常:java.lang.NumberFormatException: For input string: ““
Swagger2异常:java.lang.NumberFormatException: For input string: ““
17 1
|
9天前
|
存储 Java
Java中利用BitMap位图实现海量级数据去重
Java中利用BitMap位图实现海量级数据去重