Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 掩蔽-带星号的地址(星号)-如果数组长度为1?_Java_Regex - Fatal编程技术网

Java 掩蔽-带星号的地址(星号)-如果数组长度为1?

Java 掩蔽-带星号的地址(星号)-如果数组长度为1?,java,regex,Java,Regex,我有一个数组超出了这个例子的范围 如果我这样做: 字符串地址=“100点St Apt B” 它也应该被屏蔽:100 Po***St Apt* 如果我这样做: 字符串地址=“100点St Apt 132” 它也被屏蔽了:100 Po***St Apt*** 有人能告诉我我做错了什么吗?谢谢 public String mask(String address) { String[] splitAddress = address.split(" "); StringBu

我有一个数组超出了这个例子的范围

  • 如果我这样做:

    字符串地址=“100点St Apt B”

    它也应该被屏蔽:
    100 Po***St Apt*

  • 如果我这样做:

    字符串地址=“100点St Apt 132”

    它也被屏蔽了:
    100 Po***St Apt***

  • 有人能告诉我我做错了什么吗?谢谢

    public String mask(String address) {
            String[] splitAddress = address.split(" ");
            StringBuilder stringBuilder = new StringBuilder();
            String maskedAddress = "";
    
        String streetNum = splitAddress[0];
        stringBuilder.append(streetNum + " ");
    
    
    
        for (int i = 1; i < splitAddress.length; i++) {
                    String splitFirstTwoCharacters = splitAddress[i].substring(0, 2);
                    String remainingCharactersOfAddress = splitAddress[i].substring(2);
                    String maskAddress = remainingCharactersOfAddress.replaceAll(".", "*");
                    maskedAddress = stringBuilder.append(splitFirstTwoCharacters).append(maskAddress + " ").toString().trim();
        }
     return maskedAddress;
    }
    
    公共字符串掩码(字符串地址){
    字符串[]splitAddress=地址。拆分(“”);
    StringBuilder StringBuilder=新的StringBuilder();
    字符串maskedAddress=“”;
    String streetNum=splitAddress[0];
    stringBuilder.append(streetNum+“”);
    for(int i=1;i
    当您执行
    拆分地址[i]时。子字符串(0,2)
    拆分地址的
    部分之一是
    B
    ,它没有
    2
    endIndex
    。因此,它是不受限制的。

    当您执行
    拆分地址[i]时。子字符串(0,2)
    拆分地址的
    部分之一是
    B
    ,它没有
    endIndex
    。因此,它是超出范围的。

    问题是您在运行子字符串时没有检查字符串的长度

    以下是对现有代码没有太多更改的修复:

    for (int i = 1; i < splitAddress.length; i++) {
        if (splitAddress[i].length() <= 2) {
            stringBuilder.append(splitAddress[i] + " ");
            continue;
        }
        String splitFirstTwoCharacters = splitAddress[i].substring(0, 2);
        String remainingCharactersOfAddress = splitAddress[i].substring(2);
        String maskAddress = remainingCharactersOfAddress.replaceAll(".", "*");
        maskedAddress = stringBuilder.append(splitFirstTwoCharacters).append(maskAddress + " ").toString().trim();
    }
    return stringBuilder.toString().trim();
    
    for(int i=1;i如果(splitAddress[i].length()问题是您在运行子字符串时没有检查字符串的长度

    以下是对现有代码没有太多更改的修复:

    for (int i = 1; i < splitAddress.length; i++) {
        if (splitAddress[i].length() <= 2) {
            stringBuilder.append(splitAddress[i] + " ");
            continue;
        }
        String splitFirstTwoCharacters = splitAddress[i].substring(0, 2);
        String remainingCharactersOfAddress = splitAddress[i].substring(2);
        String maskAddress = remainingCharactersOfAddress.replaceAll(".", "*");
        maskedAddress = stringBuilder.append(splitFirstTwoCharacters).append(maskAddress + " ").toString().trim();
    }
    return stringBuilder.toString().trim();
    
    for(int i=1;i