{"record":{"id":"ea6a88c804edd5e3","repo":"TheAlgorithms/Java","slug":"input-data-contains-invalid-characters-only-upper","errorCode":null,"errorMessage":"Input data contains invalid characters. Only uppercase A-Z are allowed.","messagePattern":"Input data contains invalid characters\\. Only uppercase A-Z are allowed\\.","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"src/main/java/com/thealgorithms/ciphers/MonoAlphabetic.java","lineNumber":12,"sourceCode":"package com.thealgorithms.ciphers;\n\npublic final class MonoAlphabetic {\n\n    private MonoAlphabetic() {\n        throw new UnsupportedOperationException(\"Utility class\");\n    }\n\n    // Encryption method\n    public static String encrypt(String data, String key) {\n        if (!data.matches(\"[A-Z]+\")) {\n            throw new IllegalArgumentException(\"Input data contains invalid characters. Only uppercase A-Z are allowed.\");\n        }\n        StringBuilder sb = new StringBuilder();\n\n        // Encrypt each character\n        for (char c : data.toCharArray()) {\n            int idx = charToPos(c); // Get the index of the character\n            sb.append(key.charAt(idx)); // Map to the corresponding character in the key\n        }\n        return sb.toString();\n    }\n\n    // Decryption method\n    public static String decrypt(String data, String key) {\n        StringBuilder sb = new StringBuilder();\n\n        // Decrypt each character\n        for (char c : data.toCharArray()) {\n            int idx = key.indexOf(c); // Find the index of the character in the key","sourceCodeStart":1,"sourceCodeEnd":30,"githubUrl":"https://github.com/TheAlgorithms/Java/blob/fdfb9a395b310167a66bd29e311e36e0e3e9b964/src/main/java/com/thealgorithms/ciphers/MonoAlphabetic.java#L1-L30","documentation":"Thrown by MonoAlphabetic.encrypt(String, String) when the data string does not match the regex [A-Z]+. The cipher maps uppercase A-Z positions to key characters via charToPos (c - 'A'), so lowercase letters, digits, spaces, or punctuation are all rejected.","triggerScenarios":"Passing data containing any character outside A-Z, including lowercase, whitespace, numbers, or punctuation. The check requires at least one character and all must be uppercase letters.","commonSituations":"Forgetting to uppercase user input; passing sentences with spaces; numbers or punctuation in the plaintext; empty string also fails ([A-Z]+ requires at least one char).","solutions":["Convert input to uppercase and strip/filter non-letters before encrypting.","Pre-validate with data.matches(\"[A-Z]+\") and reject otherwise.","Decide on a normalization policy (drop vs. fail) for non-letters upstream."],"exampleFix":"// before\nString cipher = MonoAlphabetic.encrypt(plaintext, key);\n\n// after\nString clean = plaintext.toUpperCase().replaceAll(\"[^A-Z]\", \"\");\nif (clean.isEmpty()) throw new IllegalArgumentException(\"No A-Z chars to encrypt\");\nString cipher = MonoAlphabetic.encrypt(clean, key);","handlingStrategy":"validation","validationCode":"String clean = data == null ? \"\" : data.toUpperCase().replaceAll(\"[^A-Z]\", \"\");\nif (clean.isEmpty()) {\n    throw new IllegalArgumentException(\"No A-Z characters to encrypt\");\n}\nString cipher = MonoAlphabetic.encrypt(clean, key);","typeGuard":"static boolean isUpperAlpha(String s) { return s != null && s.matches(\"[A-Z]+\"); }","tryCatchPattern":"try {\n    String cipher = MonoAlphabetic.encrypt(data, key);\n} catch (IllegalArgumentException e) {\n    // non-A-Z present; normalize to uppercase and retry\n}","preventionTips":["Uppercase and strip non-letters upstream.","Pre-validate with [A-Z]+ before encrypting.","Decide drop-vs-fail for punctuation/spaces at the boundary."],"tags":["cryptography","ciphers","java","validation","string","illegalargumentexception"],"backgroundTag":null,"analyzedSha":"fdfb9a395b310167a66bd29e311e36e0e3e9b964","analyzedAt":"2026-08-13T23:36:13.315Z","schemaVersion":2},"datasetVersion":"2026-08-14T00:17:13.853Z"}