电话号码项目

作业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 + "发送的短信失败,请重新发送!");
		}
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值