{"record":{"id":"784671f9e1070237","repo":"TheAlgorithms/Java","slug":"invalid-character","errorCode":null,"errorMessage":"invalid character:{}","messagePattern":"invalid character:(.+?)","errorType":"exception","errorClass":"NumberFormatException","httpStatus":null,"severity":"error","filePath":"src/main/java/com/thealgorithms/conversions/AnyBaseToDecimal.java","lineNumber":49,"sourceCode":"            power *= radix;\n        }\n        return result;\n    }\n\n    /**\n     * Convert a character to its integer value.\n     *\n     * @param character the character to be converted\n     * @return the integer value represented by the character\n     * @throws NumberFormatException if the character is not an uppercase letter or a digit\n     */\n    private static int valOfChar(char character) {\n        if (Character.isDigit(character)) {\n            return character - CHAR_OFFSET_FOR_DIGIT;\n        } else if (Character.isUpperCase(character)) {\n            return character - CHAR_OFFSET_FOR_UPPERCASE;\n        } else {\n            throw new NumberFormatException(\"invalid character:\" + character);\n        }\n    }\n}\n","sourceCodeStart":31,"sourceCodeEnd":53,"githubUrl":"https://github.com/TheAlgorithms/Java/blob/fdfb9a395b310167a66bd29e311e36e0e3e9b964/src/main/java/com/thealgorithms/conversions/AnyBaseToDecimal.java#L31-L53","documentation":"Thrown by the private AnyBaseToDecimal.valOfChar() helper when a character is neither a digit (0-9) nor an uppercase letter (A-Z). Lowercase letters, symbols, and whitespace are all rejected. This limits convertToDecimal to inputs using digits and uppercase A-Z only.","triggerScenarios":"Passing lowercase hex digits (\"ff\"). Passing input with whitespace, punctuation, or a sign character ('+', '-'). Passing non-ASCII or Unicode digits.","commonSituations":"Hex input from a source that emits lowercase. User input containing leading/trailing spaces. Numbers prefixed with '0x' or '0X'. Locale differences producing non-ASCII digits.","solutions":["Normalize input to uppercase before calling convertToDecimal(): input.toUpperCase(Locale.ROOT).","Strip any non-alphanumeric characters (spaces, signs, '0x' prefixes) before conversion.","If lowercase or extended alphabets are required, use Integer.parseInt(input, radix) which accepts lowercase."],"exampleFix":"// before\nint dec = AnyBaseToDecimal.convertToDecimal(\"ff\", 16); // lowercase 'f' rejected\n\n// after\nint dec = AnyBaseToDecimal.convertToDecimal(\"ff\".toUpperCase(Locale.ROOT), 16);","handlingStrategy":"validation","validationCode":"String normalized = input.toUpperCase(Locale.ROOT).replaceAll(\"[^0-9A-Z]\", \"\");\nfor (char c : normalized.toCharArray()) {\n    if (!Character.isDigit(c) && !Character.isUpperCase(c)) {\n        throw new IllegalArgumentException(\"invalid char: \" + c);\n    }\n}\nint dec = AnyBaseToDecimal.convertToDecimal(normalized, radix);","typeGuard":"static boolean isUppercaseAlphaNumeric(String s) {\n    for (char c : s.toCharArray()) {\n        if (!Character.isDigit(c) && !Character.isUpperCase(c)) return false;\n    }\n    return true;\n}","tryCatchPattern":"try {\n    int dec = AnyBaseToDecimal.convertToDecimal(input, radix);\n} catch (NumberFormatException e) {\n    // normalize and retry, or surface to user\n    throw new DomainException(\"Unparseable number: \" + input, e);\n}","preventionTips":["Always uppercase input before calling convertToDecimal.","Strip prefixes ('0x'), whitespace, and signs before conversion.","Switch to Integer.parseInt for lowercase-hex compatibility."],"tags":["conversions","base-conversion","character-validation","java"],"backgroundTag":null,"analyzedSha":"fdfb9a395b310167a66bd29e311e36e0e3e9b964","analyzedAt":"2026-08-13T23:36:13.315Z","schemaVersion":2},"datasetVersion":"2026-08-14T00:17:13.853Z"}