作业1 二. {aaa,bbb,ccc},{bbb,ddd},{eee,fff},{ggg},{ddd,hhh}
运算的结果:{aaa,bbb,ccc,ddd,hhh},{eee,fff},{ggg}
public static void duplicateRemoval() {
// 作业1 二. {aaa,bbb,ccc},{bbb,ddd},{eee,fff},{ggg},{ddd,hhh}
// 运算的结果:{aaa,bbb,ccc,ddd,hhh},{eee,fff},{ggg}
// 把上面的字符串存入集合当中
Set<String> set = new HashSet<>();
set.add("aaa");
set.add("bbb");
set.add("ccc");
Set<String> set2 = new HashSet<>();
set2.add("bbb");
set2.add("ddd");
Set<String> set3 = new HashSet<>();
set3.add("eee");
set3.add("fff");
Set<String> set4 = new HashSet<>();
set4.add("ggg");
Set<String> set5 = new HashSet<>();
set5.add("ddd");
set5.add("hhh");
// 用一个大数组存放后面的几个小数组
ArrayList<Set<String>> list = new ArrayList<>();
list.add(set2);
list.add(set3);
list.add(set4);
list.add(set5);
// 循环输出
for (int i = 0; i < list.size(); i++) {
// 合并同类型
Set<String> s = list.get(i);
// 添加开关
boolean fals = false;
for (String str : s) {
if (set.contains(str)) {
fals = true;
set.addAll(s);
break;
}
}
if (fals) {
list.remove(s);
}
}
System.out.println(set);
System.out.println(list);
}
}
public class SendMessage {
// 先定义一个初始化红名单的容器
public static Map<String, HashMap<String, Set<String>>> redPhonesMap = new HashMap<>();
// 初始化电话号码
public static void init() {
String[] headPhone = { "136", "137", "181", "180", "150" };
String[] phone_136 = { "0371", "0766", "7335", "7362", "6385", "0769", "7494", "3381", "7496", "7370" };
String[] phone_137 = { "3383", "3319", "0088", "8361", "3315", "8168", "8151", "0386" };
String[] phone_181 = { "3788", "3789", "3782", "3787", "0349", "3567", "2234", "0382" };
String[] phone_180 = { "3951", "0169", "3991", "3955", "3928", "3788", "0387", "3997", "3923" };
String[] phone_150 = { "0381", "3719", "0371", "3816", "0389", "3681", "0384", "9326", "3837", "3802" };
// 迭代遍历
for (String head : headPhone) {
// 定义一个临时变量
String[] temp = {};
if (head.equals("136")) {
temp = phone_136;
} else if (head.equals("137")) {
temp = phone_137;
} else if (head.equals("181")) {
temp = phone_181;
} else if (head.equals("180")) {
temp = phone_180;
} else if (head.equals("150")) {
temp = phone_150;
}
// 定义一个方法 用来存储中间四位和末四位手机号码
createRedNumber(head, temp);
}
}
// 添加真正的红名单号码
private static void createRedNumber(String head, String[] temp) {
// 1. 先构建HashMap集合 中间四位和末四位
HashMap<String, Set<String>> hashMap = new HashMap<>();
// 2. 遍历temp中间四位的手机号码
for (String middlePhone : temp) { // 0371 0000--9999 0766 0000--9999
// 3.构建一个Set集合 用来存储末四位的手机号码
Set<String> set = new HashSet<>();
// 0000-9999 每隔一个号添加一次 0000 0002 0004
// String value = "";
for (int i = 0; i <= 9999; i += 2) {
String tailPhone = String.format("%04d", i);// 0000
set.add(tailPhone);
}
// 每一次迭代中间一个四位号码,就存储一次 一个中间四位号码对应所有的末四位号码 0371 0000--9999 / 7335 0000--9999
hashMap.put(middlePhone, set);
}
redPhonesMap.put(head, hashMap);
/*
* 头三位 中间四位 末四位 136 0371 0000-9999 0766 0000-9999 7335 0000-9999 ... ...
*
*/
}
// 校验红名单的方法 validateRedPhone redPhonesMap
// 是红名单就返回true 不是红名单就返回false
private static boolean validateRedPhone(String phoneNumber) {
// 1. 先把phoneNumber肢解为头三为 中间四位 末四位
// substring(int beginIndex,int endIndex) [beginIndex,endIndex-1]
String head = phoneNumber.substring(0, 3);// 0 1 2
String middle = phoneNumber.substring(3, 7);// 3 4 5 6
String tail = phoneNumber.substring(7);
// 开始校验
/*
* map 集合中有没有一个方法可以判断是否包含某一个key值 containsKey()
*/
if (redPhonesMap.containsKey(head)) {
// 表明头三位满足条件
// 取出中间四位和末四位的号码
HashMap<String, Set<String>> hashMap = redPhonesMap.get(head);
if (hashMap.containsKey(middle)) {
// 表明中间四位满足,判断末四位号码
Set<String> set = hashMap.get(middle);
// 是true就返回true,是false就返回false
return set.contains(tail);
} else {
// 说明中间四位不满足 ,该手机号肯定不是红名单
return false;
}
} else {
// 说明头三位就不满足 ,该手机号肯定不是红名单
return false;
}
}
// 校验手机号
public static int validatePhone(String phoneNumber) {
/*
* 0: 代表可以发送 正常状态 1: 输入的手机号码不合法 不是一个正常的手机号码 手机号码长度不满足11位 2: 输入的手机号码为红名单
*
* String regex = ""; Pattern 用于创建一个正则表达式,构造方法是私有的 static compile(regex)--->
* Pattern.compile(regex)--->正则表达式的对象 Matcher它的构造方法是默认级别的,不能被继承 static
* matcher(CharSequence input)--->Pattern.matcher(phoneNumber) --->得到匹配对象
* boolean matches() true-->满足正则 false--->不满足
*
*/
if (phoneNumber == null || phoneNumber.length() != 11) {
return 1;
} else {
// 校验是否为红名单
long begin = System.currentTimeMillis();
boolean result = validateRedPhone(phoneNumber);
long end = System.currentTimeMillis();
System.out.println("红名单校验的时间为:" + (end - begin) + "ms");
// 根据 result的值
if (result) {
// 表明是红名单
return 2;
} else {
// 都满足条件
return 0;
}
}
}
// 信息发送
public static void sendMessage(String content, String phoneNumber) {
// 概率 98%
Random random = new Random();
if ((random.nextInt(100) + 1) <= 98) { // [1,100]
System.out.println("向手机号码:" + phoneNumber + ",短信的内容为:" + content);
} else {
System.out.println("向手机号码:" + phoneNumber + "发送的短信失败,请重新发送!");
}
}
}