如果在另一个字符串中找到字符串,则将其替换为空白字符串

时间:2017-04-15 05:24:35

标签: java string

我正在完成一项任务,而这一部分正在绊倒我。

构造cipher1 首先使用第一个键中的唯一字母填充矩阵。

例如,如果密钥为“testkey”,则使用字母 T,E,S,K,Y 填写密钥。

不要从键中填写重复的字符。然后用字母表中的剩余字符填充矩阵(再次,跳过Q)。

不要重复按键中出现的任何字符。因此,对于“testkey”, cipher1 如下所示:“

密码是 5 x 5 数组,通常填充字母表中的字母减去'q'。

因此,如果我的密钥是testkey,则密码现在将填充"TESKYABCDFGHIJLMNOPRUVWXZ" instead of "ABCDEFGHIJKLMNOPRSTUVWXYZ".

我认为这样的事情会起作用,但事实并非如此。

for (int i = 0; i < key.length(); i++)
    {
        key.toCharArray();
        alphabet.replace(key[i], "");
    }

键变量是字符串“TESTKEY”,字母变量也是包含“ABCDEFGHIJKLMNOPRSTUVWXYZ”的字符串。

现在看着代码明显存在缺陷,现在我只是卡住了。请任何人向我提出建议

3 个答案:

答案 0 :(得分:1)

试试这个:

public static void main(String[] args) {

    String testS = "testkey";
    String key = "ABCDEFGHIJKLMNOPRSTUVWXYZ";

    testS = testS.toUpperCase() + key;
    testS = removeDuplicates(testS);
    System.out.println(testS);
}

static String removeDuplicates(String string) {

    StringBuilder noDuplicateChars = new StringBuilder();

    for (int i = 0; i < string.length(); i++) {

        String letter = string.substring(i, i + 1);

        if (noDuplicateChars.indexOf(letter) == -1) {
            noDuplicateChars.append(letter);
        }
    }

    return noDuplicateChars.toString();
}

如果由于某种原因您不想使用StringBuilder,您可以将removeDuplicates的实施更改为:

static String removeDuplicates(String string) {

    String noDuplicates = new String("");

    for (int i = 0; i < string.length(); i++) {

        if (!noDuplicates.contains("" + string.charAt(i))) {
            noDuplicates += "" + string.charAt(i);
        }
    }

    return noDuplicates;
}

答案 1 :(得分:0)

您可以使用LinkedHashSet。在for循环中添加class Arms { constructor() {} } class Legs { constructor() {} } class Human { constructor() { this.arms = Human.Arms(); this.legs = Human.Legs(); } static Arms() { return new Arms(); } static Legs() { return new Legs(); } } 个字符,在第二个循环中添加key个字符。然后遍历set元素并构建字符串。

请注意,如果元素已存在于集合中,则方法alphabet不会放置元素,因此不需要进行其他检查。

答案 2 :(得分:-1)

你只需要使用正则表达式;

示例:1 - 键

input: testkey
code: `String newString = input.replaceAll("(.)\\1{1,}", "$1").toUpperCase();` 
output: TESKY

例2;带有alphapatical字符串的Concat newString

input: testkey + "ABCDEFGHIJKLMNOPRSTUVWXYZ";
code: `String FinalString = input.replaceAll("(.)\\1{1,}", "$1").toUpperCase();`
output: TESKYABCDFGHIJLMNOPRUVWXZ