Я провел несколько тестов.Это самое быстрое, что я могу получить.
String a = "Test123";
String b = "Test123_321tseT_Test_rest";
int len1 = a.length();
int len2 = b.length();
if ((len1 == len2 || (len2 > len1 && (b.charAt(len1)) == '_'))
&& b.startsWith(a)) {
System.out.println("success");
} else {
System.out.println("Fail");
}
Это будет, по крайней мере, правильно работать при разумной производительности.
Редактировать: я переключил проверку _ и запуску с проверкой, так как запускается с ухудшениемВыполните проверку _.
Edit2: исправлено исключение StringIndexOutOfBoundsException.
Edit3: Правильно, Питер Лори, который делает только 1 вызов a.length (), экономит время.2,2% в моем случае.Последний тест показывает, что я на 88% быстрее, чем OP, и на 10% быстрее, чем код Питера Лоури.
Edit4: я заменяю все str.length () на локальную переменную var и запускаю еще дюжину тестов.Теперь результаты тестов становятся настолько случайными, что невозможно сказать, какой код быстрее.Моя последняя версия, кажется, выигрывает на ступеньку выше.