Соответствующий числовой шаблон - PullRequest
3 голосов
/ 02 ноября 2011

Я делаю проект, который требует числового сопоставления с образцом.Например, я хочу знать, является ли Value = 1331 частью 680+651 = 1331 или нет, то есть я хочу сопоставить 1331 с 680+651 = 1331 или любой другой данной строкой.Я пробую сопоставление с образцом в Java в первый раз, и я не смог добиться успеха.Ниже приведен фрагмент моего кода.

String REGEX1=s1;   //s1 is '1331' 
pattern = Pattern.compile(REGEX1);
matcher = pattern.matcher(line_out);   //line_out is for ex. 680+651 = 1331
System.out.println("lookingAt(): "+matcher.lookingAt());
System.out.println("matches(): "+matcher.matches());    

Он всегда возвращает false.Пожалуйста, помогите мне.

Ответы [ 3 ]

3 голосов
/ 02 ноября 2011

matches() требует, чтобы шаблон был полным, а не частичным.

Вам нужно либо изменить свой шаблон на что-то вроде .*= 1331$, либо использовать метод find(), который выполнит частичное совпадение.

2 голосов
/ 02 ноября 2011

matches() неправильный метод для этого, используйте find().

http://download.oracle.com/javase/1.4.2/docs/api/java/util/regex/Matcher.html говорит:

public boolean match ()

Пытается сопоставить всю входную последовательность с шаблоном.

и

public boolean find ()

Пытается найти следующую подпоследовательностьвходная последовательность, которая соответствует шаблону.

2 голосов
/ 02 ноября 2011

Метод matches требует идеального, полного точного соответствия. Поскольку в 680+651=1331 больше текста, чем соответствует регулярному выражению 1331, совпадения возвращаются false.

Как я указал в сообщении Брайана, вы должны быть осторожны в своем регулярном выражении, чтобы убедиться, что регулярное выражение 1331 не соответствует числу 213312, если только это не то, что вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...