Делал и без рег выражений чисто через методы String и исключения все то же - работает, но не проходит валидацию
public class Solution {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        while(true) {
            String value = reader.readLine();
            if(value.equals("end")) break;
            try {
            if(value.matches("\\-?\\d+\\.\\d+")) print(Double.parseDouble(value));
            else if(value.matches("\\-?\\d+")) {
                if(Integer.parseInt(value) > 0 &&  Integer.parseInt(value) < 128)
                print(Short.parseShort(value));
                else if(Integer.parseInt(value) <= 0 ||  Integer.parseInt(value) >= 128)
                print(Integer.parseInt(value));
            }
            else print(value);
            }
            catch(NumberFormatException e) {
                print(value);
            }
        }
    //напиште тут ваш код
    }
вывод на консоль Это тип Double, значение 2.2 Это тип String, значение 65-.98 Это тип String, значение 98.9? Это тип String, значение !65.0 Это тип String, значение "09 Это тип String, значение 4444444444444444444444444444444444444 Это тип Integer, значение 234 Это тип short, значение 21 Это тип Integer, значение -10 Это тип String, значение коко Это тип Integer, значение 456 Это тип Integer, значение 0 Это тип String, значение 12f Это тип String, значение 5745L Это тип Double, значение 0.234 Это тип Double, значение 123.0 Это тип String, значение 12/3 Это тип short, значение 1 Это тип Integer, значение 123456