В этом тривиальном примере вы не увидите большой разницы в производительности, но чисто из задействованных алгоритмов регулярное выражение
wordA|wordB
действительно будет быстрее, поскольку оно просто делает один проход черезстрока и использует конечный автомат, чтобы соответствовать одной из двух подстрок.Однако это компенсируется построением конечного автомата первым, который в этом случае должен быть почти линейным по длине регулярного выражения.Вы можете сначала скомпилировать регулярное выражение, чтобы иметь эту стоимость только один раз в течение всего срока жизни скомпилированного объекта.
Таким образом, по существу стоимость сводится к:
- линейному поиску в строке дважды (2· длина строки )
- или линейный поиск по строке один раз и построение DFA ( длина строки + длина регулярного выражения )
, если ваш текст очень большой и подстроки очень маленький, тогда это может стоить.
Тем не менее, выОптимизируем не то место, скорее всего.Используйте профилировщик, чтобы найти фактические узкие места в вашем коде и оптимизировать их;никогда не беспокойтесь о таких тривиальных «оптимизациях», если только вы не докажете, что они оказывают влияние.
И последнее, что нужно учесть: с помощью регулярного выражения вы можете убедиться, что вы действительно соответствуете словам (иливещи, которые выглядят как слова) вместо частей слова, что может быть реальной причиной для рассмотрения регулярных выражений вместо contains
.