• + 0 comments
    static Map<Character, Integer> smallcharintmap = new HashMap<>();
    static Map<Integer, Character> smallintcharmap = new HashMap<>();
    
    static Map<Character, Integer> capscharintmap = new HashMap<>();
    static Map<Integer, Character> capsintcharmap = new HashMap<>();
    
    static {
        char smallstart = 'a';
        char capstart = 'A';
    
        for(int i=1;i<=26;i++) {
            smallcharintmap.put(smallstart, i);
            smallintcharmap.put(i, smallstart);
            smallstart++;
    
            capscharintmap.put(capstart, i);
            capsintcharmap.put(i, capstart);
            capstart++;
        }
    }
    
    public static String caesarCipher(String str, int k) {
        StringBuilder resultBuilder = new StringBuilder();
        for(int i = 0; i < str.length(); i++) {
            Character ch = str.charAt(i);
            if(Character.isAlphabetic(ch)) {
                if(Character.isLowerCase(ch)) {
                    int key = (smallcharintmap.get(ch) + k)%26;
                    resultBuilder.append(smallintcharmap.get(key == 0 ? 26 : key));
                } else if(Character.isUpperCase(ch)) {
                    int key = (capscharintmap.get(ch) + k)%26;
                    resultBuilder.append(capsintcharmap.get(key == 0? 26 : key));
                }
            } else {
                resultBuilder.append(ch);
            }
        }
        return resultBuilder.toString();
    }