【问题标题】:Scanning through text to find left and right characters扫描文本以查找左右字符
【发布时间】:2018-09-23 04:27:49
【问题描述】:

我必须浏览一下:

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

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

MONCLETABDFHIJKPQRSUVWXYZ

所以在第一个文本中,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;
}

【问题讨论】:

    标签: java substring bufferedreader charat


    【解决方案1】:

    首先,您可以尝试将字母放在数组形式或列表中(即 ArrayList),然后您应该尝试围绕这些值循环实现您的解决方案逻辑。 然后你应该在字符串变量中建立你的答案。 所以你可以从这个开始将 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);
    
        }
    
    }
    

    【讨论】:

    • 好的,它只打印 89,然后打印我输入的字符串。如何使用另一个字符串的左右字符实际替换每个组的左右字符。如果你明白我的意思。
    【解决方案2】:

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

        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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-28
      • 2015-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-25
      相关资源
      最近更新 更多