регулярное выражение заменяет все недопустимые символы, кроме минус символа "-" в первом индексе строки - PullRequest
0 голосов
/ 23 апреля 2019

Я использую следующее регулярное выражение для замены всех недопустимых символов, которые существуют в строке десятичного числа:

final String REGEX_REPLACE_INVALID_DECIMAL_NUMBER_CHARACTERS = "\\D*(\\d+\\.?\\d*)\\D*";

Это мой тестовый код:

    String[] inputs = {
        "0a", // -> 0
        "a0a.0", // -> 0.0
        "b0a.t1c", // -> 0.1
        "-a0b.c1d", // -> -0.1
        "-#0.t12[3]", // -> -0.123
        "-123.[1]2_3", // -> -123.123
    };

    final String REPLACE_INVALID_DECIMAL_NUMBER_CHARACTERS = "\\D*(\\d+\\.?\\d*)\\D*";
    for (String input : inputs) {
        String replaceInvalidDecimalNumberCharacters = input.replaceAll(REPLACE_INVALID_DECIMAL_NUMBER_CHARACTERS, "$1");
        System.out.println("input: " + input +
                "\n\treplaceInvalidDecimalNumberCharacters: " + replaceInvalidDecimalNumberCharacters);
    }

В настоящее время мое регулярное выражение, заменяет все недопустимые символы, даже десятичные точки и минус в первом индексе строки.

Как исключить удаление минуса и десятичной точки?

Это мой тестовый вывод:

input: 0a   replaceInvalidDecimalNumberCharacters: 0
input: a0a.0    replaceInvalidDecimalNumberCharacters: 00
input: b0a.t1c  replaceInvalidDecimalNumberCharacters: 01
input: -a0b.c1d replaceInvalidDecimalNumberCharacters: 01
input: -#0.t12[3]   replaceInvalidDecimalNumberCharacters: 0.123
input: -123.[1]2_3  replaceInvalidDecimalNumberCharacters: 123.123

1 Ответ

2 голосов
/ 23 апреля 2019

Я предлагаю перейти к регулярному выражению, используя два шага.Сначала удалите все ненужные символы из входной строки.Затем используйте другое регулярное выражение, чтобы проверить, является ли то, что осталось после первой замены, действительным числом:

String input = "-123.[1]2_3";
input = input.replaceAll("[^0-9.-]+", "");
if (input.matches("-?\\d+(?:\\.\\d+)?")) {
    System.out.println("Found a valid number: " + input);
}
else {
    System.out.println("Input is invalid");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...