Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.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 如何使用不同数量的符号生成字符串掩码?_Java_String_Masking - Fatal编程技术网

Java 如何使用不同数量的符号生成字符串掩码?

Java 如何使用不同数量的符号生成字符串掩码?,java,string,masking,Java,String,Masking,例如: 我有一个长度为5个符号的字符串掩码,还有一个长度为3个符号的值。 所有组合均为: val__, _val_, __val 遮罩长度=3,值长度=2的另一个示例: xx_, _xx 如何以编程方式生成这些掩码? 例如,在具有以下签名的方法中: String[]generateMasks(int maskLength,String val) 我的尝试: private ArrayList<String> maskGenerator2(int from, char[] valu

例如: 我有一个长度为5个符号的字符串掩码,还有一个长度为3个符号的值。 所有组合均为:

val__, _val_, __val
遮罩长度=3,值长度=2的另一个示例:

xx_, _xx
如何以编程方式生成这些掩码? 例如,在具有以下签名的方法中: String[]generateMasks(int maskLength,String val)

我的尝试:

private ArrayList<String> maskGenerator2(int from, char[] value) {
    ArrayList<String> result = new ArrayList<String>();
    //initial position
    char[] firstArray = new char[from];
    for (int i=0; i<from; i++) {
        if (i < value.length) firstArray[i] = value[i];
        else firstArray[i] = '_';
    }
    result.add(String.valueOf(firstArray));
    System.out.println(firstArray);

    //move value
    int k = 0;
    while (k < from - value.length) {
        char last = firstArray[from - 1];
        for (int i = from - 1; i > 0; i--) {
            firstArray[i] = firstArray[i - 1];
        }
        firstArray[0] = last;
        result.add(String.valueOf(firstArray));
        System.out.println(firstArray);
        k++;
    }
    return result;
}
private ArrayList maskGenerator2(int-from,char[]值){
ArrayList结果=新建ArrayList();
//初始位置
char[]firstArray=新字符[from];
对于(int i=0;i 0;i--){
firstArray[i]=firstArray[i-1];
}
firstArray[0]=最后一个;
add(String.valueOf(firstArray));
System.out.println(firstArray);
k++;
}
返回结果;
}
也许有更优雅的解决方案吗?

  • 创建一个字符串,该字符串由重复的掩码符号组成,长度为所需长度。。看
  • 使用StringBuilder在每个可能的点插入输入字符串
范例

public static void main(String[] args) throws Exception {
    System.out.println(createMask(5, "val"));
    System.out.println(createMask(3, "xx"));
}

private static List<String> createMask(int length, String value) {
    List<String> list = new ArrayList<String>();
    String base = new String(new char[length]).replace("\0", "_");
    for (int offset = 0; offset <= length - value.length(); offset++) {
        StringBuilder buffer = new StringBuilder(base);
        buffer.replace(offset, offset + value.length(), value);
        list.add(buffer.toString());
    }
    return list;
}

到目前为止你只懂逻辑?你没有试过写一行吗?我现在试着写:)我希望有现成的解决方案,我不需要重新发明一个字节。我通过子数组移动来解决这个任务,但你的解决方案更高层次,更优雅。谢谢
[val__, _val_, __val]
[xx_, _xx]