Я хотел бы проверить, заканчивается ли строка цифрой. Я ожидаю, что следующая строка Java вернет true. Почему он печатает false?
System.out.println("I end with a number 4".matches("\\d$"));
Я хотел бы проверить, заканчивается ли строка цифрой. Я ожидаю, что следующая строка Java вернет true. Почему он печатает false?
System.out.println("I end with a number 4".matches("\\d$"));
Ваше регулярное выражение не будет соответствовать всей строке, а только последней части. Попробуйте приведенный ниже код, и он должен работать нормально, поскольку он соответствует всей строке.
System.out.println("I end with a number 4".matches("^.+?\\d$"));
Вы можете проверить это для быстрой проверки онлайн-тестировщиков регулярных выражений, таких как: http://www.regexplanet.com/simple/index.html. Это также дает вам то, что вы должны использовать в Java-коде в результатах с соответствующими экранами.
. + гарантирует, что перед цифрой будет по крайней мере один символ. ? обеспечит ленивое совпадение вместо жадного соответствия.
В Java Regex существует разница между Matcher.find()
(найти совпадение в любом месте строки) и Matcher.matches()
(соответствует всей строке).
У String только есть метод matches()
(реализованный эквивалент этого кода: Pattern.compile(pattern).matcher(this).matches();
), поэтому вам нужно создать шаблон, который соответствует полной строке:
System.out.println("I end with a number 4".matches("^.*\\d$"));
Ваше выражение RegEx слегка отключено. Попробуйте следующее:
System.out.println("I end with a number 4".matches("^.*\\d$"));
Вы также можете просто протестировать это, если вы оцениваете строку за раз:
System.out.println("I end with a number 4".matches(".*\\d"));
Ваше исходное выражение, без. * проверено только, была ли строка номером и не учитывала текст, который может предшествовать этому номеру. Вот почему это всегда было ложным.
Ниже показано значение true:
System.out.println("4".matches("^\\d$"));
System.out.println("I end with a number 4".matches(".*\\d")); // prints true
или
String s = "I end with a number 4";
System.out.println(Character.isDigit(s.charAt(s.length()-1))); // prints true
попробуйте следующее:
System.out.println("I end with a number 4".matches(".*\\d\$"));