Вы regexp немного неэффективны и не соответствуют вашему описанию. У вас есть '\ d \ *?' - это одна цифра, указанная опционально *. Затем необязательно '; (? = \ D)' - ';' с контрольной цифрой. String '1 * 2 * 3 *' будет соответствовать вашему регулярному выражению, но не вашему описанию. Вы можете использовать regexp. Он соответствует вам ввода и немного более эффективно.
final String TEST_REGEX = "(\\d+\\*?)(?:;\\d+\\*?)+";
Он пройдет тест, когда count & lt; 300, но все еще не удалось получить большие значения. Для проверки ввода используйте операцию простой строки, например indexOf и подстроку .