摘要
本文將介紹一個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來實現複雜的文本處理任務。