2012-09-17 29 views
0

我有一个字符串,我需要逃避任何特殊组合的字符。换句话说,我需要在任何出现任何这种组合的前面贴上“\”。大多数组合实际上是单个字符(例如双引号或反斜线),但一些是多字符的(例如“& &”)。一种方法是用这些组合创建一个字符串数组,循环遍历它们并运行一个String.Replace(),最后一个检查反斜杠以避免递归转义。但是有没有更好的(更优雅/快速/等)的方式呢? Thxc#:如何快速插入一个字符到任何出现的特殊字符组合前的字符串?

+1

你应该先反斜杠,而不是最后反斜杠,否则你会例如用“\ &&”替换“&&”,然后用“\\ &&”替换,这可能不是你想要的。 – Rawling

+0

非常好,谢谢! –

+0

你有没有&&&在你的字符串中?如果是,是否用于&&&& && &&? – tschmit007

回答

0

你可以把你的整个字符串和你想要做的每个替换类型运行String.Replace(),据我所知,这是最快/最优雅的方式来做到这一点。这就是为什么它是一种内置的方法。

+0

Replace最大的问题是它每次调用时都会创建更多的字符串副本。这往往会导致大型项目中可衡量的性能问题。使用StringBuilder更好。 –

+0

我想这也取决于正在使用的字符串的大小,任何低于256字节或4或5替换不会明显降低性能。但是,你是正确的,因为String对象是不可变的。yada yada yada –

1

您可以使用Regex.Replace

var input = @"abc'def&&aa\cc""ff"; 
var output = Regex.Replace(input, @"'|&&|""|\\", m => @"\" + m); // => "abc\'def\&&aa\\cc\"ff" 
+0

Regex.Replace的性能很慢,即使这样String.Replace – Lunik

+0

这取决于。如果你只需要几次而不是循环,那就没问题。该问题要求多个值的更好:优雅,快速...这是更优雅,更容易错误然后String.Replace你需要照顾替换顺序(例如“\”应该是最后,如果&和&&需要被替换等等)。你所谈论的是过早优化。此外,如果你有5件事要逃脱,你需要调用String.Replace 5次和Regex.Replace一次。 –

+0

我认为我需要的效率比其他任何东西都多,但是无论如何感谢 –

相关问题