Шаблон, который вы используете, в соответствии с OWASP известен как злое регулярное выражение (большую часть времени они знают, о чем говорят):
https://www.owasp.org/index.php/Regular_expression_Denial_of_Service_-_ReDoS
Это в основном соответствует aa
ИЛИ aa
или aab
(поскольку b необязательно, если добавить ?
)
Подобное Regex уязвимо для атаки ReDoS или Regex Denial of Service.
Так что да, разберитесь, что вы хотите соответствовать. Я предлагаю в приведенном выше примере вы должны просто сопоставить aa
, без необходимости групп, повторения или чередования:
Pattern p = Pattern.compile("aa");
Также, как кто-то указал, кто сейчас удалил свой пост, вы не должны использовать + = для добавления к строкам. Вы должны использовать StringBuffer вместо:
public class Match {
public static void main(String[] args) {
Pattern p = Pattern.compile("aa");
StringBuffer buffy = new StringBuffer(200);
int count = 0;
for(int i = 0; i < 200; i++){
buffy.append("a")
if (p.matcher(buffy.toString()).matches()){
count++;
}
}
System.out.println(count);
}
}