摘要
本文将介绍一个Java程序,该程序能够检测文本中的微信ID和手机号码,并将其屏蔽。程序首先定义了一系列与微信相关的关键字,然后使用正则表达式来匹配合法的手机号码和微信ID。最后,该程序将检测到的手机号码和微信ID替换为星号,以保护用户隐私。
1. 程序介绍
随着社交媒体的普及,个人隐私保护变得越来越重要。在某些情况下,我们可能需要从文本中检测并屏蔽微信ID和手机号码,以防止个人信息泄露。本程序旨在实现这一功能。
2. 关键字检测
程序首先定义了一系列与微信相关的关键字,如“微信”、“WeChat”、“VX”等。通过遍历这些关键字,程序可以检测文本中是否包含这些关键字。
3. 正则表达式匹配
程序使用了两个正则表达式来匹配手机号码和微信ID。手机号码的正则表达式匹配11位数字,以1开头,第二位是2到9之间的数字。微信ID的正则表达式则匹配以字母或下划线开头的6到20个字符,由字母、数字、下划线组成。
4. 检测与屏蔽
程序使用Pattern和Matcher类来查找文本中的手机号码和微信ID。一旦找到匹配项,程序会将其替换为星号,以屏蔽这些信息。
5. 结果输出
程序将检测到的关键字、手机号码和微信ID存储在DetectionResult对象中,并提供原始文本和屏蔽后的文本。最后,程序打印出每个测试用例的检测结果。
6. 示例代码
以下是程序的核心部分代码:
public class WxAndPhoneDetector {
public static void main(String[] args) { // 测试用例数组 String[] testCases = { "我的微信号是:WeChat123_456", "联系电话:13609086289,非工作时间也可以联系我。", "微信转账功能真的很方便。", "微信联系我:WeChat_123456,电话:13609086289,价格可以微信详谈。", "参考编号:WeChat123!!!!!! 价格:136090800,详情请联系。", "详情请参考产品手册。", "账号: WeChat_123456, 联系电话: 13609086289。", "如果你需要帮助,可以联系我的微信号:wEcHaT_123456,或者手机:13609086289。", "紧急联系电话:+8613609086289 或者 136-0908-6289。", "微信号列表:WeChat_1, WeChat_2, 联系电话:136090800, 1391234567。" };
// 遍历测试用例 for (String text : testCases) { DetectionResult result = detectKeywordsAndWeChatIDAndMobile(text); System.out.println("测试用例文本: " + text); System.out.println("检测结果: " + result); System.out.println(); } }
/** * 检测文本中是否包含指定的关键字、合法的微信号和手机号码,并返回检测结果。 * * @param text 需要检测的文本 * @return 返回包含检测结果的对象 */ public static DetectionResult detectKeywordsAndWeChatIDAndMobile(String text) { DetectionResult result = new DetectionResult(); result.originalText = text; // 保存原始文本 result.containsKeyword = false; // 初始化关键字标志为false
// 定义需要检测的关键字 String[] keywords = {"微信", "Wx", "wx", "WX", "WeChat", "wechat", "Weixin", "weixin", "VX", "vx", "Vx", "vX", "QQ", "qq", "Qq", "qQ", "电话", "手机", "联系方式", "联系电话", "联系手机", "联系QQ", "联系微信"};
// 检测关键字 for (String keyword : keywords) { if (text.contains(keyword)) { result.containsKeyword = true; result.keywordsFound.add(keyword); } }
// 正则表达式,匹配11位手机号码。 String mobileRegex = "1[3-9]\\d{9}";
// 正则表达式,匹配以字母或下划线开头的6到20个字符,由字母、数字、下划线组成 String weChatIDRegex = "[a-zA-Z_][a-zA-Z0-9_]{5,18}";
// 使用Pattern和Matcher检测手机号码 Pattern mobilePattern = Pattern.compile(mobileRegex); Matcher mobileMatcher = mobilePattern.matcher(text);
// 查找并替换所有匹配的手机号码为星号 StringBuffer buffer = new StringBuffer(); while (mobileMatcher.find()) { String mobile = mobileMatcher.group(); result.mobileNumbersFound.add(mobile); } mobileMatcher.appendTail(buffer); // 添加未匹配的部分 String textAfterMobileReplacement = buffer.toString(); // 保存屏蔽手机号码后的文本
// 使用Pattern和Matcher检测微信号 Pattern weChatPattern = Pattern.compile(weChatIDRegex); Matcher weChatMatcher = weChatPattern.matcher(textAfterMobileReplacement);
buffer = new StringBuffer(textAfterMobileReplacement); while (weChatMatcher.find()) { String weChatID = weChatMatcher.group(); result.wechatIDsFound.add(weChatID); } weChatMatcher.appendTail(buffer); // 添加未匹配的部分 // 根据已匹配的手机号码和微信号码,替换所有匹配的手机号码和微信号码为星号 result.maskedText = text.replaceAll(mobileRegex, "****").replaceAll(weChatIDRegex, "****"); // 保存屏蔽手机号码和微信号码后的文本
return result; }
/** * 封装检测结果的类。 */ public static class DetectionResult { List<String> keywordsFound = new ArrayList<>(); List<String> wechatIDsFound = new ArrayList<>(); List<String> mobileNumbersFound = new ArrayList<>(); boolean containsKeyword = false; // 是否包含关键字 String originalText; // 原始文本 String maskedText; // 屏蔽微信号和手机号码后的文本
@Override public String toString() { return "是否包含关键字: " + containsKeyword + ", 关键字列表: [" + String.join(", ", keywordsFound) + "]" + ", 微信号列表: [" + String.join(", ", wechatIDsFound) + "]" + ", 手机号码列表: [" + String.join(", ", mobileNumbersFound) + "]" + "\n" + "原始文本: \"" + originalText + "\"" + "\n" + "屏蔽后的文本: \"" + maskedText + "\""; } }}测试用例文本: 我的微信号是:WeChat123_456检测结果: 是否包含关键字: true, 关键字列表: [微信, WeChat], 微信号列表: [WeChat123_456], 手机号码列表: []原始文本: "我的微信号是:WeChat123_456"屏蔽后的文本: "我的微信号是:****"
测试用例文本: 联系电话:13609086289,非工作时间也可以联系我。检测结果: 是否包含关键字: true, 关键字列表: [电话, 联系电话], 微信号列表: [], 手机号码列表: [13609086289]原始文本: "联系电话:13609086289,非工作时间也可以联系我。"屏蔽后的文本: "联系电话:****,非工作时间也可以联系我。"
测试用例文本: 微信转账功能真的很方便。检测结果: 是否包含关键字: true, 关键字列表: [微信], 微信号列表: [], 手机号码列表: []原始文本: "微信转账功能真的很方便。"屏蔽后的文本: "微信转账功能真的很方便。"
测试用例文本: 微信联系我:WeChat_123456,电话:13609086289,价格可以微信详谈。检测结果: 是否包含关键字: true, 关键字列表: [微信, WeChat, 电话], 微信号列表: [WeChat_123456], 手机号码列表: [13609086289]原始文本: "微信联系我:WeChat_123456,电话:13609086289,价格可以微信详谈。"屏蔽后的文本: "微信联系我:****,电话:****,价格可以微信详谈。"
测试用例文本: 参考编号:WeChat123!!!!!! 价格:136090800,详情请联系。检测结果: 是否包含关键字: true, 关键字列表: [WeChat], 微信号列表: [WeChat123], 手机号码列表: []原始文本: "参考编号:WeChat123!!!!!! 价格:136090800,详情请联系。"屏蔽后的文本: "参考编号:****!!!!!! 价格:136090800,详情请联系。"
测试用例文本: 详情请参考产品手册。检测结果: 是否包含关键字: false, 关键字列表: [], 微信号列表: [], 手机号码列表: []原始文本: "详情请参考产品手册。"屏蔽后的文本: "详情请参考产品手册。"
测试用例文本: 账号: WeChat_123456, 联系电话: 13609086289。检测结果: 是否包含关键字: true, 关键字列表: [WeChat, 电话, 联系电话], 微信号列表: [WeChat_123456], 手机号码列表: [13609086289]原始文本: "账号: WeChat_123456, 联系电话: 13609086289。"屏蔽后的文本: "账号: ****, 联系电话: ****。"
测试用例文本: 如果你需要帮助,可以联系我的微信号:wEcHaT_123456,或者手机:13609086289。检测结果: 是否包含关键字: true, 关键字列表: [微信, 手机], 微信号列表: [wEcHaT_123456], 手机号码列表: [13609086289]原始文本: "如果你需要帮助,可以联系我的微信号:wEcHaT_123456,或者手机:13609086289。"屏蔽后的文本: "如果你需要帮助,可以联系我的微信号:****,或者手机:****。"
测试用例文本: 紧急联系电话:+8613609086289 或者 136-0908-6289。检测结果: 是否包含关键字: true, 关键字列表: [电话, 联系电话], 微信号列表: [], 手机号码列表: [13609086289]原始文本: "紧急联系电话:+8613609086289 或者 136-0908-6289。"屏蔽后的文本: "紧急联系电话:+86**** 或者 136-0908-6289。"
测试用例文本: 微信号列表:WeChat_1, WeChat_2, 联系电话:136090800, 1391234567。检测结果: 是否包含关键字: true, 关键字列表: [微信, WeChat, 电话, 联系电话], 微信号列表: [WeChat_1, WeChat_2], 手机号码列表: []原始文本: "微信号列表:WeChat_1, WeChat_2, 联系电话:136090800, 1391234567。"屏蔽后的文本: "微信号列表:****, ****, 联系电话:136090800, 1391234567。"7. 结论
本文介绍的Java程序能够有效地检测和屏蔽文本中的微信ID和手机号码,有助于保护用户的隐私信息。通过使用正则表达式和字符串处理技术,程序能够灵活地适应不同的检测需求。
8. 未来工作
未来的工作可以包括扩展关键字列表,优化正则表达式以提高匹配准确性,以及增加对其他社交媒体ID的检测支持。
本文提供了一个简单的Java程序,用于检测和屏蔽文本中的微信ID和手机号码。程序的设计考虑了隐私保护的需求,并展示了如何使用Java的正则表达式API来实现复杂的文本处理任务。