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

java中两个String字符串比较去重假设有两个字符串 String qc1 张三 李四 赵二 谢大脚 刘能 String qc2 谢广坤 谢大脚 张三 如何去重 只留下 qc2 中不包含 qc1 中的字段呢 这时候要用到 indexOf java lang String indexOf String

大家好,我是讯享网,很高兴认识大家。

假设有两个字符串

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

小讯
上一篇 2025-03-07 17:40
下一篇 2025-03-21 15:31

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/47471.html