Ho riscontrato un problema interessante relativo al metodo delle corrispondenze String (RegExp).Strano comportamento del metodo matches() di String
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
Gli ultimi 3 asserzione non riesce inaspettatamente. Non sono riuscito a trovare alcun motivo per cui questo strano comportamento stia accadendo. Hai lo stesso problema? Hai qualche idea?
A proposito, in caso di richiesta, la mia versione di Java è la seguente.
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)
Ho studiato dopo le tue risposte e ho notato che i caratteri C in alto (& # 0043) sono diversi dai caratteri C più bassi (& # 1057). I caratteri C nelle ultime 3 righe sembrano essere dall'alfabeto cirillico. http://webdesign.about.com/od/localization/l/blhtmlcodes-ru.htm – lemiorhan
Il problema si verifica a causa dell'input dell'utente. Per verificare se l'input è alfa-decimale (anche per Cyrillic C), org.apache.commons.lang.StringUtils.isAlphanumeric() restituisce true come segue: assertTrue (StringUtils.isAlphanumeric ("\ u0421 \ u0421")) ; // cirillico C assertTrue (StringUtils.isAlphanumeric ("\ u00E7 \ u00E7")); // ascii C – lemiorhan