{"record":{"id":"0e05151afa46a6bb","repo":"TheAlgorithms/Java","slug":"brackets-is-null","errorCode":null,"errorMessage":"brackets is null","messagePattern":"brackets is null","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"src/main/java/com/thealgorithms/stacks/BalancedBrackets.java","lineNumber":55,"sourceCode":"        };\n        for (char[] pairedBracket : pairedBrackets) {\n            if (pairedBracket[0] == leftBracket && pairedBracket[1] == rightBracket) {\n                return true;\n            }\n        }\n        return false;\n    }\n\n    /**\n     * Check if {@code brackets} is balanced\n     *\n     * @param brackets the brackets\n     * @return {@code true} if {@code brackets} is balanced, otherwise\n     * {@code false}\n     */\n    public static boolean isBalanced(String brackets) {\n        if (brackets == null) {\n            throw new IllegalArgumentException(\"brackets is null\");\n        }\n        Stack<Character> bracketsStack = new Stack<>();\n        for (char bracket : brackets.toCharArray()) {\n            switch (bracket) {\n            case '(':\n            case '[':\n            case '<':\n            case '{':\n                bracketsStack.push(bracket);\n                break;\n            case ')':\n            case ']':\n            case '>':\n            case '}':\n                if (bracketsStack.isEmpty() || !isPaired(bracketsStack.pop(), bracket)) {\n                    return false;\n                }\n                break;","sourceCodeStart":37,"sourceCodeEnd":73,"githubUrl":"https://github.com/TheAlgorithms/Java/blob/fdfb9a395b310167a66bd29e311e36e0e3e9b964/src/main/java/com/thealgorithms/stacks/BalancedBrackets.java#L37-L73","documentation":"BalancedBrackets.isBalanced(String) checks whether a string of bracket characters is correctly matched and nested. A null input has no characters to inspect and would also NPE inside toCharArray(), so the method fails fast with an IllegalArgumentException naming the problem ('brackets is null') rather than an opaque NullPointerException.","triggerScenarios":"Calling `BalancedBrackets.isBalanced(null)` directly, or passing a variable that was never assigned / came from a Map.get returning null / a JSON field that was absent.","commonSituations":"Optional config fields parsed as null when omitted; reading from a source that returns null on missing data; refactors that removed an upstream default; lazy-initialized fields not yet populated.","solutions":["Pass an empty string \"\" when no brackets are present instead of null.","Null-check at the call site and treat null as 'no brackets' (return true or skip).","Ensure the upstream source provides a non-null default."],"exampleFix":"// before\nboolean ok = BalancedBrackets.isBrackets(maybeNull);\n\n// after\nboolean ok = maybeNull == null || BalancedBrackets.isBalanced(maybeNull);\n// or pass a default:\nBalancedBrackets.isBalanced(maybeNull == null ? \"\" : maybeNull);","handlingStrategy":"validation","validationCode":"static boolean safeIsBalanced(String brackets) {\n    if (brackets == null) {\n        return true; // or throw a domain-specific error\n    }\n    return BalancedBrackets.isBalanced(brackets);\n}","typeGuard":"static boolean isCheckableString(String s) {\n    return s != null;\n}","tryCatchPattern":null,"preventionTips":["Normalize null to \"\" at your system boundary.","Use Objects.requireNonNullElse(s, \"\") when a default is acceptable.","Never pass Map.get/JSON-field results straight into the method without a null guard."],"tags":["stacks","brackets","null-check","validation","illegalargument"],"backgroundTag":null,"analyzedSha":"fdfb9a395b310167a66bd29e311e36e0e3e9b964","analyzedAt":"2026-08-13T23:36:13.315Z","schemaVersion":2},"datasetVersion":"2026-08-14T00:17:13.853Z"}