Вот этот код абсолютно рабочий:
public static void main(String[] args) {

        try {
            String str = args[0];

            // Если в строке есть что-то кроме чисел и букв из диапазонов a-z A-Z, выводим ошибку
            if (str.matches(".*[^0-9a-zA-Z].*")) System.out.println("incorrect");
            else {

                char[] symbols = str.toCharArray();
                Arrays.sort(symbols);

                char largestChar = symbols[symbols.length - 1]; // Самой большой символ в числе

                if (largestChar < 50) System.out.println(2); // Бинарная система
                else if (largestChar < 58) System.out.println(largestChar - 47); // Если цифра
                     else if (largestChar < 91) System.out.println(largestChar - 64 + 10); // Если большая буква
                          else if (largestChar < 123) System.out.println(largestChar - 96 + 10); // Если маленькая буква
            }
        }
        catch (Exception e) {
            System.out.println("incorrect");
        }
    }
Но валидатор его не принимает по последнему пункту. Чудом нашёл в комментариях ответ, что валидатору почему-то не нравится проверка на маленькую букву. Тогда я перевёл строку в большой регистр и убрал последний if - чудо, вывод не поменялся, а задачка прошла. Обидно, учитывая то, что кто-то другой может и не найти тот комментарий и решить, что он неправильно решил задачу.