Решал задачу "парсер реквестов". В правильном решении тут, и в некоторых других задачах попадалась такая логика: выбирается метод, в который передать параметр String objValue (там может быть и число и символы)- если нормально то double если выкинет исключение - то String.
if (objValue != null) {
            try {
                alert(Double.parseDouble(objValue));
            } catch (NumberFormatException nfe) {
                alert(objValue);
            }
        }
    }

    public static void alert(double value) {
        System.out.println("double: " + value);
    }

    public static void alert(String value) {
        System.out.println("String: " + value);
    }
Но можно ведь написать просто проверку на наличие букв в строке, и тогда все будет ясно и без исключений?
if (value.chars().anyMatch(Character::isLetter)) {
                alert(value);
            } else {
                alert(Double.valueOf(value));
            }
в чем тайный смысл ловли исключений?