50,530
社区成员
发帖
与我相关
我的任务
分享
String sa = "01-08,10-18";
String sb = "01-06,07-08,10-12,14-18";
Set<Integer> aSet = new HashSet<Integer>();
Set<Integer> bSet = new HashSet<Integer>();
String[] aa = sa.split(",");
for (String a : aa) {
String[] va = a.split("-");
if (va.length == 2) {
int v1 = Integer.valueOf(va[0]).intValue();
int v2 = Integer.valueOf(va[1]).intValue();
for (int i=v1; i<=v2; i++) {
aSet.add(Integer.valueOf(i));
}
}
}
String[] bb = sb.split(",");
for (String b : bb) {
String[] vb = b.split("-");
if (vb.length == 2) {
int v1 = Integer.valueOf(vb[0]).intValue();
int v2 = Integer.valueOf(vb[1]).intValue();
for (int i=v1; i<=v2; i++) {
bSet.add(Integer.valueOf(i));
}
}
}
//判断9是否在某个集合里
if (aSet.contails(Integer.valueOf("09"))) {
System.out.println("contains");
}
//判断AB是否一样
if (aSet.containsAll(bSet)) { //集合A包含集合B的前提下判断
//如果想准去判断,就用两个集合相减
Set<Integer> subSet = new HashSet<Integer>(aSet);
subSet.removeAll(bSet);
System.out.println(Arrays.toString(subSet.toArray(new Integer[0])));
if (subSet.size()==0) {System.out.println("equals")}
//如果不想准确判断,判断起点和终点
Integer[] ai = aSet.toArray(new Integer[0]);
Integer[] bi = bSet.toArray(new Integer[0]);
Arrays.sort(ai); //这里如果原来的字符串是排好序的,可以把Set改为List(ArrayList)
Arrays.sort(bi); //这样这里就不需要重新排序了
if (ai[0].equals(bi[0]) && ai[ai.length-1].equals(bi[bi.length-1])) {
System.out.println("equals");
}
}
/**
* 判断a是否在集合之中
*
* @param string {"01-08","10-18"}
* @param a 8
* @return
*/
public static boolean isHave(String[] string,int a)
{
boolean b = false;
/** 遍历数组中的集合字符串 */
for(int i =0;i < string.length;i++)
{
/** 拆分字符串为长度为2的数组 */
String[] str = string[i].split("-");
/** 长度不为2返回false */
if(str.length != 2)
return false;
/** 如果在集合内就返回true */
if(a >= Integer.valueOf(str[0]) && a <= Integer.valueOf(str[1]))
{
b = true;
break;
}
}
return b;
}
/**
* 判断a是否在集合之中
*
* @param string {"01-08","10-18"}
* @param a 8
* @return
*/
public static boolean isHave(String[] string,int a)
{
boolean b = false;
/** 遍历数组中的集合字符串 */
for(int i =0;i < string.length;i++)
{
/** 拆分字符串为长度为2的数组 */
String[] str = string[i].split("-");
/** 长度不为2返回false */
if(str.length != 2)
return false;
/** 如果在集合内就返回true */
if(a >= Integer.valueOf(str[0]) && a <= Integer.valueOf(str[1]))
{
b = true;
break;
}
}
return b;
}
import java.util.Arrays;
import java.util.Comparator;
public class Test {
public static void main(String[] args) {
// 把字符串分解成数组,以逗号(前后可以有空格)分离
String[] ss = "01-06, 14-18, 10-12, 07-08".trim().split("\\s*,\\s*");
// 对分解后的数组进行按从小到大排序
Arrays.sort(ss, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
for (int i = 0; i < s1.length() && i < s2.length(); ++i) {
if (s1.charAt(i) != s2.charAt(i)) { return s1.charAt(i) - s2.charAt(i); }
}
if (s1.length() > s2.length()) {
return 1;
} else if (s1.length() < s2.length()) {
return -1;
} else {
return 0;
}
}
});
System.out.println(Arrays.toString(ss));
}
}