Для полноты (хотя было дано несколько хороших ответов, мне нравятся лучшие от Марка и Иоахима), вот две версии на основе String.split (regex) и String.split (regex, предел)
(Редактировать, исправить ошибку:)
boolean containsAtLeastTwoAsterisks = ("_" + myString + "_").split("\\*", 3).length == 3;
boolean containsExactlyTwoAsterisks = ("_" + myString + "_").split("\\*").length == 3;
Я написал небольшой тест , основанный на наших ответах (я знаю, тесты ничего не значат, но они забавные, и мой, вероятно, дерьмо, я знаю.) В любом случае, вот результаты для пробного прогона:
*********************************************************************************
Testing strings with one or less asterisk
Processor: bhups
Finished. Duration: 40 ms, errors: 0
Processor: Bozho (loop version)
Finished. Duration: 33 ms, errors: 0
Processor: Bozho (regex version)
Finished. Duration: 806 ms, errors: 0
Processor: Joachim Sauer
Finished. Duration: 24 ms, errors: 0 <-- winner
Processor: Mark Byers
Finished. Duration: 1068 ms, errors: 0
Processor: seanizer
Finished. Duration: 408 ms, errors: 0
*********************************************************************************
Testing strings with exactly two asterisks
Processor: bhups
Finished. Duration: 14 ms, errors: 0 <-- winner
Processor: Bozho (loop version)
Finished. Duration: 21 ms, errors: 0
Processor: Bozho (regex version)
Finished. Duration: 693 ms, errors: 0
Processor: Joachim Sauer
Finished. Duration: 14 ms, errors: 0 <-- winner
Processor: Mark Byers
Finished. Duration: 491 ms, errors: 0
Processor: seanizer
Finished. Duration: 340 ms, errors: 0
*********************************************************************************
Testing strings with more than two asterisks (not all processors will be included)
Skipping processor bhups
Processor: Bozho (loop version)
Finished. Duration: 63 ms, errors: 0 <-- winner
Skipping processor Bozho (regex version)
Skipping processor Joachim Sauer
Processor: Mark Byers
Finished. Duration: 1555 ms, errors: 0
Processor: seanizer
Finished. Duration: 860 ms, errors: 0
Похоже, не-регулярное выражение намного быстрее, чем регулярное. Это то, что вы ожидаете, я думаю.
РЕДАКТИРОВАТЬ: исправлен неправильный победитель. извини, Иоахим