有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

JAVAlang.StringIndexOutOfBoundsException:开始0,结束4,长度1

我使用以下java代码标记一个长数字:

public static String masked(String card_number) {
        return new StringBuilder().append(card_number.substring(0, 4)).append("....")
                .append(card_number.substring(card_number.length() - 3, card_number.length())).toString();
    }

    public static String maskedBin(String card_number) {
        return new StringBuilder().append(card_number.substring(0, 4)).toString();
    }

    public static String maskedTail(String card_number) {
        return new StringBuilder().append(card_number.substring(card_number.length() - 3, card_number.length())).toString();
    }

不幸的是,当我发送非常短的号码时,我得到异常:java.lang.StringIndexOutOfBoundsException: begin 0, end 4, length 1

有什么方法可以防止这种情况吗?例如,如果没有返回错误所需的最小数字长度


共 (2) 个答案

  1. # 1 楼答案

    我增加了最小长度的支票。长度较短的卡号将被完全屏蔽,即1234567=>;XXXXXXX。我选择了长度限制,以便至少有一个字符被屏蔽。字符串重复函数是从string repeat复制的

    public static String masked(String card_number) {
        if(card_number.length() < 9){
            return maskedAll(card_number);
        }
    
        return new StringBuilder().append(card_number.substring(0, 4)).append("....")
                .append(card_number.substring(card_number.length() - 3, card_number.length())).toString();
    }
    
    public static String maskedBin(String card_number) {
        if(card_number.length() < 5){
            return maskedAll(card_number);
        }
    
        return new StringBuilder().append(card_number.substring(0, 4)).toString();
    }
    
    public static String maskedTail(String card_number) {
        if(card_number.length() < 5){
            return maskedAll(card_number);
        }
    
        return new StringBuilder().append(card_number.substring(card_number.length() - 3, card_number.length())).toString();
    }
    
    public static String maskedAll(String card_number) {
        return String.join("", Collections.nCopies(card_number.length(), "X"));
    }
    
  2. # 2 楼答案

    您在这里写了append(card_number.substring(0, 4))您使用了4值作为硬编码,如果卡号长度小于4值,那么它将给您错误。因此,使用这个card_number.length()代替硬编码的值4。或者,如果您想要硬编码值4,那么首先检查if(card_number.length() > 4)