首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java手機號中間四位替換為星號:通用字符串片段替換工具方法

     編輯:程式設計綜合問答

需求

將15012345678 → 150****5678,指定區間字符替換為*。

通用工具方法

/**
 * 字符串指定區間替換
 * @param source 源字符串
 * @param startInclusive 起始索引(含)
 * @param endExclusive 結束索引(不含)
 * @param replacement 替換字符
 * @return 處理後字符串,參數非法返回空串
 */
public static String replaceRange(String source, int startInclusive, int endExclusive, String replacement) {
    if (source == null || startInclusive < 0 || endExclusive > source.length() || startInclusive >= endExclusive) {
        return "";
    }
    StringBuilder sb = new StringBuilder(source.length());
    sb.append(source, 0, startInclusive);           // 前綴
    for (int i = startInclusive; i < endExclusive; i++) {
        sb.append(replacement);                     // 替換段
    }
    sb.append(source, endExclusive, source.length()); // 後綴
    return sb.toString();
}

// 使用示例
String phone = "15012345678";
String masked = replaceRange(phone, 3, 7, "*"); // 150****5678

手機號專用封裝

public static String maskPhone(String phone) {
    if (phone == null || phone.length() != 11) return phone;
    return replaceRange(phone, 3, 7, "****");
}

// 支持多種格式
public static String maskChinesePhone(String phone) {
    if (phone == null) return null;
    // 去除非數字
    String digits = phone.replaceAll("\\D", "");
    if (digits.length() == 11) return maskPhone(digits);
    return phone; // 非標準長度不處理
}

正則替換法(簡潔但可讀性稍弱)

// 替換第4-7位(索引3-6)
String masked = phone.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");
// 或指定位置
String masked = phone.substring(0,3) + "****" + phone.substring(7);

性能對比

擴展:身份證、銀行卡、姓名脫敏

// 身份證:保留前6後4
idCard.replaceAll("(\\d{6})\\d{8}(\\d{4})", "$1********$2");
// 姓名:單字保留,多字首尾保留
name.replaceAll("(.)(.+)(.)", "$1*$3"); // 張三→張*三,張無忌→張*忌
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
方法時間複雜度對象創建推薦場景
StringBuilderO(n)1個高頻調用、長字符串
substring拼接O(n)3個簡單固定格式
正則replaceAllO(n)多個(Pattern編譯)一次性/配置化