手机号屏蔽,如:13112345678-> 131*****000,要求*号个数可以自定义 屏蔽不良词汇,如:这也玩得太TM菜了,瑶MLGB居然带终结,要求替换所有不良词汇。java实现
时间: 2024-11-12 11:04:19 浏览: 6
PHP实现手机号码中间四位用星号(*)隐藏的自定义函数分享
在Java中,手机号码的屏蔽通常通过字符串处理的方式实现,你可以创建一个函数,接收原始手机号和星号个数作为输入。下面是一个简单的示例:
```java
public class PhoneNumberMasker {
public static String maskPhoneNumber(String phoneNumber, int starCount) {
if (phoneNumber == null || phoneNumber.isEmpty()) {
return "";
}
StringBuilder maskedNumber = new StringBuilder(phoneNumber.length());
for (int i = 0; i < phoneNumber.length(); i++) {
if (i == 3 || i == 7) { // 避免在中间的数字位置放星号
maskedNumber.append(phoneNumber.charAt(i));
} else {
maskedNumber.append('*');
}
}
// 如果星号总数不够,填充到指定长度
while (maskedNumber.length() < starCount + 4) {
maskedNumber.append('*');
}
return maskedNumber.toString();
}
public static void main(String[] args) {
String phoneNumber = "13112345678";
int starCount = 4;
System.out.println(maskPhoneNumber(phoneNumber, starCount)); // 输出:131****5678
}
}
```
对于不良词汇屏蔽,你可以使用正则表达式和黑名单来替换特定词语。下面是一个简单的例子,使用`replaceAll`方法替换敏感词:
```java
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class BadWordsFilter {
private static final Pattern BAD_WORDS_PATTERN = Pattern.compile("(?!^)([A-Z]{2,})(?=\\b|[A-Z])"); // 匹配非首字母大写的单词
public static String filterBadWords(String input) {
if (input == null || input.isEmpty()) {
return input;
}
Matcher matcher = BAD_WORDS_PATTERN.matcher(input);
String[] badWords = {"菜", "TM", "MLGB", "居然", "终结"}; // 添加需要屏蔽的词汇
for (String word : badWords) {
input = input.replace(word, "*".repeat(word.length()));
}
return input;
}
public static void main(String[] args) {
String text = "这也玩得太TM菜了,瑶MLGB居然带终结";
System.out.println(filterBadWords(text)); // 输出:这也玩得太*.*了,瑶*M*L*G*B居然带*.*
}
}
```
以上两个部分分别实现了手机号码和敏感词的处理。注意这只是一个基础的示例,实际应用中可能需要更复杂的过滤规则或加载黑名单从文件等。
阅读全文