Метод замены строк |Шифрование и дешифрование - PullRequest
0 голосов
/ 20 октября 2018

Задача довольно проста:

Вы только что были наняты ЦРУ программистом в отдел шифрования.Ваша задача - написать класс под названием Crypto.Один метод, шифрование, примет строку, которая представляет предложение, которое будет зашифровано.Он вернет строку, то есть предложение, в котором все v (большие или маленькие) заменены на «ag», r, все m (большие или маленькие) - на «ssad», все g (большие или маленькие) - на «jeb ..».w »и все b (большие или маленькие) с« dug>? / ».

Класс содержит другой метод, decrypt, который принимает строку, представляющую предложение, которое будет расшифровано.В этом способе выполняется обратный процесс, описанный выше.Он возвращает строку, которая является исходным предложением до шифрования.

Мои методы шифрования и дешифрования работают совершенно нормально.Просто он не шифрует и не дешифрует, как должен.Вот как должен выглядеть пример выполнения теста:

Enter a sentence that is to be encrypted: *This is a very big morning.* 
Original sentence = This is a very big morning.
Encrypted sentence = This is a ag',rery dug>?/ijeb..w ssadorninjeb..w. 
Decrypted sentence = This is a very big morning.

А вот как выглядит my :

Enter a sentence that is to be encrypted: This is a very big morning. 
Original sentence = This is a very big morning.
Encrypted sentence = This is a ajedug>?/..w',rery dug>?/ijedug>?/..w ssadorninjedug>?/..w.
Decrypted sentence = This is a very big morning.

Как вы можете сказать, зашифрованное предложениене совсем совпадают, и я знаю, почему, я просто не знаю, как это исправить.

Вот мои методы:

String encrypt(String string) {
    return string
            .replace("v", "ag',r").replace("V", "ag',r")
            .replace("m", "ssad").replace("M", "ssad")
            .replace("g", "jeb..w").replace("G", "jeb..w")
            .replace("b", "dug>?/").replace("B", "dug>?/");

}

String decrypt(String string) {
    return string
            .replace("dug>?/", "b")
            .replace("jeb..w", "g")
            .replace("ssad", "m")
            .replace("ag',r", "v");
}

Любая помощь / руководство приветствуется!

Ответы [ 3 ]

0 голосов
/ 20 октября 2018

Другой метод может быть (при условии, что в исходном тексте не будет отметок {1}, {2}, {3}, {4} в исходном тексте) сделать что-то вроде этого:

static String encrypt(String string) {
    String encryptedWithNumbers = string
          .replace("v", "{1}")
          .replace("V", "{1}")
          .replace("m", "{2}")
          .replace("M", "{2}")
          .replace("g", "{3}")
          .replace("G", "{3}")
          .replace("b", "{4}")
          .replace("B", "{4}");

     return encryptedWithNumbers
          .replace("{1}", "ag',r")
          .replace("{2}","ssad")
          .replace("{3}", "jeb..w")
          .replace("{4}", "dug>?/");
}
0 голосов
/ 20 октября 2018

Спасибо всем за помощь!Вот мой окончательный (рабочий) код:

String encrypt(String string) {

    String s = "";

    for (int i = 0; i < string.length(); i++) {
        char c = string.charAt(i);
        if (c == 'v' || c == 'V') {
            s += "ag',r";
        } else if (c == 'm' || c == 'M') {
            s += "ssad";
        } else if (c == 'g' || c == 'G') {
            s += "jeb..w";
        } else if (c == 'b' || c == 'B') {
            s += "dug>?/";
        } else {
            s += c;
        }
    }

    return s;

}
0 голосов
/ 20 октября 2018

Ваш вывод неверен, потому что вы заменяете v на ag',r, но затем заменяете g в ag',r на jeb..w.Вы не должны заменять то, что уже заменено.

Чтобы это исправить, вам нужно начать с пустой строки и проверять каждый символ отдельно.Если это v, m, g или b, вы добавляете соответствующий тарабаршин к строке.Если это не одна из этих букв, вы добавляете эту букву.

Здесь я сделал это с помощью StringBuilder:

private static String encrypt(String s) {
    StringBuilder builder = new StringBuilder();
    s.chars().forEach(x -> {
        char c = (char)x;
        if (c == 'v' || c == 'V') {
            builder.append("ag',r");
        } else if (c == 'm' || c == 'M') {
            builder.append("ssad");
        } else if (c == 'g' || c == 'G') {
            builder.append("jeb..w");
        } else if (c == 'b' || c == 'B') {
            builder.append("dug>?/");
        } else {
            builder.append(c);
        }
    });
    return builder.toString();
}

Редактировать:

Задача, в частности, говорит об использовании строковых методов, а не каких-либо внешних классов

В этом случае вы не можете использовать StringBuilder и должны использовать String, но это та же идея.Вы просто используете += для добавления к нему.

Вы также, вероятно, тоже не можете использовать forEach.Вам нужен нормальный цикл for, который перебирает индексы строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...