Странное поведение метода match () в String - PullRequest
8 голосов
/ 05 октября 2011

Я столкнулся с интересной проблемой в методе совпадений String (RegExp).

assertTrue("33CCFF".matches("[0-9A-Za-z]{6}"));
assertTrue("CC33FF".matches("[0-9A-Za-z]{6}"));
assertTrue("CC3355".matches("[0-9A-Za-z]{6}"));
assertTrue("CC9955".matches("[0-9A-Za-z]{6}"));
assertTrue("CC3366".matches("[0-9A-Za-z]{6}"));
assertTrue("CC3965".matches("[0-9A-Za-z]{6}"));
assertTrue("CC1961".matches("[0-9A-Za-z]{6}"));
assertTrue("CC9999".matches("[0-9A-Za-z]{6}"));
assertTrue("СС3966".matches("[0-9A-Za-z]{6}")); // failing
assertTrue("СС9965".matches("[0-9A-Za-z]{6}")); // failing
assertTrue("СС9966".matches("[0-9A-Za-z]{6}")); // failing

Последнее 3 утверждение неожиданно завершается неудачей.Я не мог найти никаких причин, почему это странное поведение происходит.У вас есть такая же проблема?У вас есть какие-нибудь идеи?

Кстати, в случае, если меня спросят, моя java версия выглядит следующим образом.

java version "1.6.0_26"
Java(TM) SE Runtime Environment (build 1.6.0_26-b03)
Java HotSpot(TM) 64-Bit Server VM (build 20.1-b02, mixed mode)

Ответы [ 2 ]

15 голосов
/ 05 октября 2011

Последние три не на самом деле начинаются с ASCII символа "C".Они начинаются с не-ASCII символа, который выглядит как "C".Это не соответствует ничему в наборе [0-9A-Za-z], следовательно, шаблон не работает.

(Я выяснил это, скопировав и вставив код в текстовый редактор, который ужасно хорошо обрабатывает не-ASCII-символы- они вышли как "?".)

2 голосов
/ 05 октября 2011

ваш "СС3966" (я режу и вставляю) помечается как не UTF-8, поэтому reg-ex не соответствует им. Когда я изменяю ваш текст и просто набираю его сам, он работает как положено. Не знаю, откуда вы скопировали эти значения, но это ваша проблема

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