扫描文本以查找左右字符

时间:2018-04-12 21:47:38

标签: java substring bufferedreader charat

我必须扫描一遍:

JD IR BW TQ DW SH UB XW AH NG AS XW CH UF BW FO DW SH UB BW TQ GW UH YG JV IE VM YE JD UO

然后将每个字符的左右字母与本文中的相应字符进行匹配:

MONCLETABDFGHIJKPQRSUVWXYZ

所以在第一篇文章中,J会有左写字母(I),D会有正确的字母(F)

这将给我一个解码的消息。唯一的问题是我不知道用什么方法来解决这个问题。

有人有什么想法吗?我觉得自己没有足够的知识甚至不知道从哪里开始。

我设置了消息(MONCLET ....)和密钥(JD IR BW ....)。但解码后的消息正在使用消息和密钥创建一条最终消息。

使用此行读取行:

        BufferedReader f = new BufferedReader (new FileReader("C:\\assignment5\\data20.txt"));
        for (int i = 0 ; i < 2 ; i++)
        {
            key = f.readLine ();                      
            coded = f.readLine ();
            alpha = prepareKey (key);
            System.out.println (alpha);
            message = decode (coded, alpha);
            System.out.println (message);
        }
        f.close ();

使用

准备密钥
private static String prepareKey (String key)
{
return key;
}

使用

准备解码后的字符串
private static String decode (String coded, String key)
{
return coded;
}

2 个答案:

答案 0 :(得分:0)

首先,您可以尝试将字母放在数组形式或列表(即ArrayList)中,然后您应该尝试循环实现解决方案逻辑的值。 然后你应该在String变量中建立你的答案。 所以你可以从这开始将String转换成Char数组

public class StringToCharJava {
    public static void main(String[] args) {
        String str = "jtest";

        //string to char array
        char[] chars = str.toCharArray();
        System.out.println(chars.length);

        //char at specific index
        char c = str.charAt(2);
        System.out.println(c);

        //Copy string characters to char array
        char[] chars1 = new char[7];
        str.getChars(0, 7, chars1, 0);
        System.out.println(chars1);

    }

}

答案 1 :(得分:0)

假设你已经解析了输入,它看起来像这样:

    String message = "JD IR BW TQ DW SH UB XW AH NG AS XW CH UF BW FO DW SH UB BW TQ GW UH YG JV IE VM YE JD UO";
    String translations = "MONCLETABDFGHIJKPQRSUVWXYZ";

然后你可以解码这个消息:

    String decodedMessage = doDecode(message, translations);
    System.out.println(decodedMessage);

这些是支持方法:

private String doDecode(String message, String translationsString) {
    Map<String, String> leftTranslations = buildTranslationTable(translationsString, -1);
    Map<String, String> rightTranslations = buildTranslationTable(translationsString, 1);

    String translation = "";
    String[] messagePairs = message.split(" ");
    for (String messagePair : messagePairs) {
        String messageLeft = Character.toString(messagePair.charAt(0));
        String messageRight = Character.toString(messagePair.charAt(1));
        String translationLeft = leftTranslations.get(messageLeft);
        String translationRight = rightTranslations.get(messageRight);
        translation += translationLeft + translationRight;
    }

    return translation;
}

private Map<String,String> buildTranslationTable(String translationsString, int offset) {
    Map<String,String> translations = new Hashtable<>();

    for (int i=0; i<translationsString.length(); i++) {
        if (               i >= 0 &&            i < translationsString.length() &&
                (i + offset) >= 0 && (i + offset) < translationsString.length() ) {
            String key = Character.toString(translationsString.charAt(i));
            String value = Character.toString(translationsString.charAt(i + offset));
            translations.put(key, value);
        }
    }

    return translations;
}