Для проверки корректности введённой суммы с помощью регулярных выражений в Java можно использовать следующий шаблон:
String regex = "^\$?\d+(\.\d{1,2})?$";
Давайте разберём этот шаблон по частям:
- ^
- указывает на начало строки.
- \$?
- соответствует знаку доллара ($
), который может быть опциональным (?
указывает на наличие 0 или 1 символа). Экранирующий символ используется для того, чтобы знак доллара рассматривался как символ, а не как специальный символ регулярного выражения.
- \d+
- соответствует одной или более цифр.
- (\.\d{1,2})?
- это группа, которая соответствует десятичной части суммы. Внутри группы:
- \.
- соответствует точке (символ экранируется, потому что точка является специальным символом регулярных выражений).
- \d{1,2}
- соответствует одной или двум цифрам после точки.
- ?
- указывает на наличие 0 или 1 группы десятичной части.
- $
- указывает на конец строки.
Теперь мы можем использовать этот шаблон для проверки корректности введённой суммы, например, в методе isValidAmount
:
import java.util.regex.Pattern; public class AmountValidator { private static final String REGEX = "^\$?\d+(\.\d{1,2})?$"; private static final Pattern PATTERN = Pattern.compile(REGEX); public static boolean isValidAmount(String input) { return PATTERN.matcher(input).matches(); } public static void main(String[] args) { String[] amounts = {"$100", "50.25", "1.5", "$10.123", "abc"}; for (String amount : amounts) { System.out.println(amount + " is valid: " + isValidAmount(amount)); } } }
В этом примере, мы имеем метод isValidAmount
, который принимает строку input
и возвращает значение true
, если входная строка является корректной суммой, и false
в противном случае. Мы используем статическое поле PATTERN
для скомпилированного шаблона и метод matcher(input)
класса Pattern
для создания объекта Matcher
, который мы использовали для выполнения заданного шаблона на входной строке. Затем мы используем метод matches()
класса Matcher
, чтобы проверить, соответствует ли весь ввод заданному шаблону.
Результат выполнения данного примера будет следующим:
$100 is valid: true 50.25 is valid: true 1.5 is valid: true $10.123 is valid: false abc is valid: false
В результате мы видим, что все корректные суммы ($100
, 50.25
, 1.5
) проходят проверку, в то время как некорректные ($10.123
, abc
) оказываются невалидными.