Меня не устраивает огромное полотно if / else. Ниже я привёл свой код на критику, не жайлете, пожалуйста, букв))
package com.company;


public class Main {

    public static void main(String[] args) {
        String binaryNumber = "100111010000";
        System.out.println("Двоичное число " + binaryNumber + " равно шестнадцатеричному числу " + toHex(binaryNumber));
        String hexNumber = "9d0";
        System.out.println("Шестнадцатеричное число " + hexNumber + " равно двоичному числу " + toBinary(hexNumber));
    }

    public static String toHex(String binaryNumber) {

        //all we need
        int lengthOfBinaryNumber = binaryNumber.length();
        String hexSymbolsMap = "0123456789abcdef";
        int lengthOfHexSymbolsMap = hexSymbolsMap.length();
        String[] binaryMap = {"0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111"};

        // checking string
        if (binaryNumber.equals("")) return "";

        for (int i = 0; i < lengthOfBinaryNumber; i++) {
            // checking for the binaryNumber consist of 0 and 1
            if (binaryNumber.charAt(i) != '1' && binaryNumber.charAt(i) != '0') {
                return "";
            }
        }

        //making binaryNumber % 4 = 0
        StringBuilder binaryNumberBuilder = new StringBuilder(binaryNumber);
        while (binaryNumberBuilder.length() % 4 != 0) binaryNumberBuilder.insert(0, '0');
        binaryNumber = binaryNumberBuilder.toString();
        StringBuilder hexNumber = new StringBuilder();

        for (int i = 0; i < lengthOfBinaryNumber; i += 4) {

            //taking four symbols from binaryNumber
            StringBuilder fourBinarySymbols = new StringBuilder();
            for (int j = 0; j < 4; j++) {
                fourBinarySymbols.append(binaryNumber.charAt(j + i));
            }

            //finding equals from binaryMap
            for (int j = 0; j < lengthOfHexSymbolsMap; j++) {
                if (fourBinarySymbols.toString().equals(binaryMap[j])) {
                    //adding one symbol that equals
                    hexNumber.append(hexSymbolsMap.charAt(j));
                }
            }
        }

        return hexNumber.toString();
    }

    public static String toBinary(String hexNumber) {

        // all we need
        if (hexNumber.equals("")) return "";
        String hexSymbolsMap = "0123456789abcdef";
        int lengthOfHex = hexNumber.length();
        int lengthOfHexSymbolsMap = hexSymbolsMap.length();
        StringBuilder binaryNumber = new StringBuilder();
        String[] binaryMap = {"0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111"};

        //checking hexNumber consist of symbols from hexSymbolsMap
        for (int i = 0; i < lengthOfHex; i++) {
            //isRight is a "checker"
            boolean isRight = false;
            //if in the end of the cycle isRight stay false then hexNumber consist of symbols that are not from hexSymbolsMap
            for (int j = 0; j < lengthOfHexSymbolsMap; j++) {
                if (hexNumber.charAt(i) == hexSymbolsMap.charAt(j)) {
                    isRight = true;
                    break;
                }
            }
            // if isRight staying false, so that means hexNumber doesn't consist of symbols from hexSymbolsMap
            if (!isRight) return "";
        }

        // after all the checks. Making binaryNumber by matching hexSymbolsMap and binaryMap using same indexes
        for (int i = 0; i < lengthOfHex; i++) {
            for (int j = 0; j < lengthOfHexSymbolsMap; j++) {
                if (hexNumber.charAt(i) == hexSymbolsMap.charAt(j)) {
                    binaryNumber.append(binaryMap[j]);
                }
            }
        }

        return binaryNumber.toString();
    }
}