在公司里遇到2个 String 类型的 字符串 需要进行包含,被包含,部分包含或者完全不包含的判断。
想了一个思路,分享一下,希望能抛砖引玉
假设有2个字符串:
String A1="1_2_3_4";
String A2="3_4_5_6";
写一个方法能判断出是属于如题的哪一种情况。
1、首先我们先将字符串转成HashSet,转的方法可以自行搜索,用HashSet的好处后面再说※
Set setA1=new Hash Set();
Set setA2=new HashSet();
2、再申明4个 StringBuffer ,用于存放比较后的结果,方便判断。
StringBuffer A1ExistA2=new StringBuffer();// A1存在A2里的元素
StringBuffer A1NotExistA2=new StringBuffer();// A1不存在A2里的元素
StringBuffer A2ExistA1=new StringBuffer();// A2存在A1里的元素
StringBuffer A2NotExistA1=new StringBuffer();// A2不存在A1里的元素
3、好了我们现在开始说比较的思路。
先开始迭代A1,将A1中的每一个字符与A2进行contain判断,
举例:A2.contain(“1”),这里返回false,因为A2中没有字符1。A1NotExistA2.append(“1”)
再举例:A2.contain(“3”),这里返回true,因为A2中含有字符3。A1ExistA2.append(“3”)
以此类推,每次比较的结果放入StringBuffer。
迭代完后,再反过来迭代A2.
举例:A1.contain(“3”),这里返回true,因为A1中含有字符3。A2ExistA1.append(“3”)
再举例:A1.contain(“5”),这里返回false,因为A1中没有字符5。A2NotExistA1.append(“5”)
4、两个set全部迭代完后,我们拿到4个StirngBuffer,我们对4个SB进行校验,就可以获得我们想要的结果。
我们一共可以获得5种结果。先以我们例子来说。
A1ExistA2=3,4
A1NotExistA2=1,2
A2ExistA1=3,4
A2NotExistA1=5,6
4个SB都有数据,代表 A1与A2存在交集。
5、以此类推,再举例新的数据:
1>举例:A1=”1_2_3″ ,A2=”4_5_6″
这样的结果是:
A1ExistA2=""
A1NotExistA2="1,2,3"
A2ExistA1=""
A2NotExistA1="4,5,6"
A1ExistA2和A2ExistA1为空,A1NotExistA2和A2NotExistA1有数据,那么这种结果代表 A1与A2没有交集 。
2>举例:A1=”1_2_3_4″ ,A2=”1_2_3″
这样的结果是:
A1ExistA2="1,2,3"
A1NotExistA2="4"
A2ExistA1="1,2,3"
A2NotExistA1=""
A1ExistA2、A1NotExistA2和A2ExistA1有数据,A2NotExistA1为空,那么这种结果代表 A1包含A2
3>举例:A1=”1_2_3″ ,A2=”1_2_3_4″
这样的结果是:
A1ExistA2="1,2,3"
A1NotExistA2=""
A2ExistA1="1,2,3"
A2NotExistA1="4"
A1ExistA2、A2ExistA1和A2NotExistA1有数据,A1NotExistA2为空,那么这种结果代表 A2包含A1
4>举例:A1=”1_2_3″ ,A2=”3_2_1″
这样的结果是:
A1ExistA2="1,2,3"
A1NotExistA2=""
A2ExistA1="3,2,1"
A2NotExistA1=""
A1ExistA2和A2ExistA1有数据,A1NotExistA2和A2NotExistA1为空,那么这种结果代表 A1与A2正好包含(与顺序无关)
那么以上就是通过这种方式的比较,判断出5中包含的关系,大家可以在此基础上进行扩展和优化。
※之前说到用HashSet,其实用String来做contain的判断也是可以的,但是从性能上说,String的contain比set的Contain要慢,这个大家可以自行验证,性能这东西如果不知道也就无所谓,但是一旦知道,如果不去优化,就浑身不自在。
好了大家有什么好的方法和建议,欢迎评论。Woof!!