StringBuilder
не поддерживает использование IComparer
при поиске / замене текста (фактически, вообще нет поддержки поиска). Вы могли бы попробовать развернуть посимвольную версию, но это будет сложно и может все еще работать плохо.
Исходя из вашего варианта использования, я бы предложил использовать строку, а не StringBuilder
, и использовать string.IndexOf()
, чтобы найти позиции во входной строке, где вы собираетесь выполнять замену, что поддерживает поиск без учета регистра. Как только вы нашли все области замены, создайте StringBuilder
, а затем скопируйте каждую область, заменив найденный текст требуемыми значениями замены.
РЕДАКТИРОВАТЬ: Предположительно, вы собираетесь использовать замену на StringBuilder
, чтобы избежать выделения дополнительных строк и понизить производительность. Однако замена текста в буфере StringBuilder
на самом деле может быть более дорогой, особенно если строки замены имеют другую длину, чем исходная строка, которую они заменяют. Каждая замена требует, чтобы символы были смещены вперед или назад в зависимости от того, короче или длиннее замещающий текст. Выполнение перемещений блока памяти, как это будет дорого.