using static System.Console;
using System.Text.RegularExpressions;
using System.Diagnostics;
public static void Main() {
var lista = "RUASANTA HELENA, 769 AP 51 BL H JD ALVORADA~ 17513322 ";
var sw = new Stopwatch();
WriteLine($"RegEx: {(Regex.Replace(lista, @"(\d+) ", "$1~ "))}");
for (int i = 0; i < times; i++) texto = Regex.Replace(lista, @"(\d+) ", "$1~ ");
var timer1 = sw.ElapsedTicks;
WriteLine($"SB: {(MudaEndereco(lista))}");
for (int i = 0; i < times; i++) texto = MudaEndereco(lista);
var timer2 = sw.ElapsedTicks;
WriteLine($"SB2: {(MudaEndereco2(lista, (c) => char.IsDigit(c), (c) => char.IsWhiteSpace(c)))}");
for (int i = 0; i < times; i++) texto = MudaEndereco2(lista, (c) => char.IsDigit(c), (c) => char.IsWhiteSpace(c));
var timer3 = sw.ElapsedTicks;
var factor = Min(timer1, timer2, timer3);
WriteLine($"RegEx: {(double)timer1 / factor, 6:0.000} ({TimeSpan.FromTicks(timer1).ToString((@"ss\:fff"))}) {timer1 / times, 3} Ticks cada");
WriteLine($"SB: {(double)timer2 / factor, 6:0.000} ({TimeSpan.FromTicks(timer2).ToString((@"ss\:fff"))}) {timer2 / times, 3} Ticks cada");
WriteLine($"SB2: {(double)timer3 / factor, 6:0.000} ({TimeSpan.FromTicks(timer3).ToString((@"ss\:fff"))}) {timer3 / times, 3} Ticks cada");
public static string MudaEndereco(string texto, char adicao = '~') {
var resultado = new StringBuilder(texto.Length * 2);
foreach (var caractere in texto) {
if (Char.IsDigit(anterior) && Char.IsWhiteSpace(caractere)) resultado.Append(adicao);
resultado.Append(caractere);
return resultado.ToString();
public static string MudaEndereco2(string texto, Func<char, bool> sequencia, Func<char, bool> terminador, char adicao = '~') {
var resultado = new StringBuilder(texto.Length * 2);
foreach (var caractere in texto) {
if (sequencia(anterior) && terminador(caractere)) resultado.Append(adicao);
resultado.Append(caractere);
return resultado.ToString();
public static T Min<T>(params T[] numbers) => numbers.Min();