public static String desensitizeIdCard(String idCard) {
    if (idCard == null || idCard.isEmpty()) {
        return idCard;
    }

    // 去除空格
    idCard = idCard.trim();
    int length = idCard.length();

    // 长度小于等于 10 位时,直接返回原值,实际身份证号至少 15 位
    if (length <= 10) {
        return idCard;
    }

    String prefix = idCard.substring(0, 6);
    String suffix = idCard.substring(length - 4);
    int starCount = length - 10;

    return prefix + repeatChar('*', starCount) + suffix;

    return prefix + "*".repeat(starCount) + suffix;
}
  • 在 Android 开发中,上述代码出现如下错误信息
Cannot resolve method 'repeat' in 'String'
问题原因
  • String 的 repeat 是 Java 11 才引入的方法,项目使用的是 Java 8 或更低版本
处理策略
  • 提供兼容 Java 8 的实现
private static String repeatChar(char c, int count) {
    if (count <= 0) {
        return "";
    }
    StringBuilder sb = new StringBuilder(count);
    for (int i = 0; i < count; i++) {
        sb.append(c);
    }
    return sb.toString();
}

public static String desensitizeIdCard(String idCard) {
    if (idCard == null || idCard.isEmpty()) {
        return idCard;
    }

    // 去除空格
    idCard = idCard.trim();
    int length = idCard.length();

    // 长度小于等于 10 位时,直接返回原值,实际身份证号至少 15 位
    if (length <= 10) {
        return idCard;
    }

    String prefix = idCard.substring(0, 6);
    String suffix = idCard.substring(length - 4);
    int starCount = length - 10;

    return prefix + repeatChar('*', starCount) + suffix;
}
Logo

1331

更多推荐