Трудно предложить альтернативу, потому что мы не знаем точно, как вы хотите отформатировать числа.
Однако каждый раз, когда вы выполняете эту строку:
if (string.matches("-?\\d+(\\.\\d+)")) {
выперекомпиляция регулярного выражения. Это будет довольно медленно.
Скомпилируйте его один раз, сохраните в поле:
static final Pattern PATTERN = Pattern.compile("-?\\d+(\\.\\d+)");
и затем используйте это в условии:
if (PATTERN.matcher(string).matches()) {