在公司里遇到2个String类型的字符串需要进行包含,被包含,部分包含或者完全不包含的判断。
想了一个思路,分享一下,希望能抛砖引玉
假设有2个字符串:
String A1="1_2_3_4";String A2="3_4_5_6";写一个方法能判断出是属于如题的哪一种情况。
Set setA1=new HashSet();Set setA2=new HashSet();StringBuffer A1ExistA2=new StringBuffer();// A1存在A2里的元素StringBuffer A1NotExistA2=new StringBuffer();// A1不存在A2里的元素StringBuffer A2ExistA1=new StringBuffer();// A2存在A1里的元素StringBuffer A2NotExistA1=new StringBuffer();// A2不存在A1里的元素先开始迭代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")
我们一共可以获得5种结果。先以我们例子来说。
A1ExistA2=3,4A1NotExistA2=1,2A2ExistA1=3,4A2NotExistA1=5,64个SB都有数据,代表A1与A2存在交集。
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!!
| 留言与评论(共有 0 条评论) “” |