#java #regex
#java #регулярное выражение
Вопрос:
Я использую следующее регулярное выражение для замены всех недопустимых символов, которые существуют в строке десятичного числа:
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
"ntreplaceInvalidDecimalNumberCharacters: " 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. Если у вас нет нескольких точек в вашей строке и
-
они помещаются только в начале вашей строки, как в ваших примерах, вы можете просто использовать[^dn.-]
и заменить его пустой строкой, чтобы получить желаемую строку. ДЕМОНСТРАЦИЯ
Ответ №1:
Я предлагаю продолжить с регулярным выражением, используя два шага. Сначала удалите все нерелевантные символы из входной строки. Затем используйте другое регулярное выражение, чтобы проверить, является ли то, что остается после первой замены, допустимым числом:
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");
}