Napotkałem interesujący problem dotyczący metody String (RegExp).Dziwne zachowanie metody dopasowania ciągów()
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
Ostatnie 3 asercja nieoczekiwanie się zawiesza. Nie mogłem znaleźć żadnych powodów, dla których to dziwne zachowanie się dzieje. Czy masz ten sam problem? Czy masz jakies pomysły?
Przy okazji, w przypadku pytania, moja wersja java jest następująca.
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)
Sprawdziłem po twoich odpowiedziach i zauważyłem, że górne znaki C (& # 0043) są różne niż dolne znaki C (& # 1057). Sygnały C w ostatnich 3 liniach wydają się być z cyrylicy. http://webdesign.about.com/od/localization/l/blhtmlcodes-ru.htm – lemiorhan
Problem występuje z powodu wprowadzenia danych przez użytkownika. Aby sprawdzić, czy dane wejściowe są dziesiętne (nawet dla cyrylicy C), org.apache.commons.lang.StringUtils.isAlphanumeric() zwraca true jako następujące: assertTrue (StringUtils.isAlphanumeric ("\ u0421 \ u0421")) ; // cyrillic C assertTrue (StringUtils.isAlphanumeric ("\ u00E7 \ u00E7")); // ascii C – lemiorhan