我有一个如下格式的字符串
string s = "This is a Test String.\n This is a next line.\t This is a tab.\n'
我想从上面的字符串中删除所有出现的\n和\r。
我已经尝试了string s = s.Trim(new char[] {'\n', '\r'});但这并没有帮助。
我有一个如下格式的字符串
string s = "This is a Test String.\n This is a next line.\t This is a tab.\n'
我想从上面的字符串中删除所有出现的\n和\r。
我已经尝试了string s = s.Trim(new char[] {'\n', '\r'});但这并没有帮助。
你想要使用字符串。Replace删除一个字符。
s = s.Replace("\n", String.Empty);
s = s.Replace("\r", String.Empty);
s = s.Replace("\t", String.Empty);
注意String。Trim(params char[] trimChars)只从被调用的实例中删除trimChars中的前导字符和尾随字符。
你可以创建一个扩展方法,这样就避免了上面生成大量临时字符串的性能问题:
static string RemoveChars(this string s, params char[] removeChars) {
Contract.Requires<ArgumentNullException>(s != null);
Contract.Requires<ArgumentNullException>(removeChars != null);
var sb = new StringBuilder(s.Length);
foreach(char c in s) {
if(!removeChars.Contains(c)) {
sb.Append(c);
}
}
return sb.ToString();
}
如果速度和低内存使用很重要,可以这样做:
var sb = new StringBuilder(s.Length);
foreach (char i in s)
if (i != '\n' && i != '\r' && i != '\t')
sb.Append(i);
s = sb.ToString();
我喜欢使用正则表达式。在这种情况下,你可以这样做:
string replacement = Regex.Replace(s, @"\t|\n|\r", "");
正则表达式在。net世界中不像在动态语言中那么流行,但是它们提供了很多操作字符串的功能。
FYI,
Trim()已经做到了。
以下LINQPad示例:
void Main()
{
var s = " \rsdsdsdsd\nsadasdasd\r\n ";
s.Length.Dump();
s.Trim().Length.Dump();
}
输出:
23
18
就这么做吧
s = s.Replace("\n", String.Empty).Replace("\t", String.Empty).Replace("\r", String.Empty);
我知道这是一个老帖子,但我想分享我用来删除新行字符的方法。
s.Replace(Environment.NewLine, "");
引用:
MSDN字符串。替换方法和MSDN环境。换行符属性
LINQ方法:
string s = "This is a Test String.\n This is a next line.\t This is a tab.\n'";
string s1 = String.Join("", s.Where(c => c != '\n' && c != '\r' && c != '\t'));
正确的选择实际上取决于输入字符串的大小以及强制和内存要求,但我会使用像这样的正则表达式
string result = Regex.Replace(s, @"\r\n?|\n|\t", String.Empty);
或者如果我们需要多次应用相同的替换,最好使用Regex的编译版本,如
var regex = new Regex(@"\r\n?|\n|\t", RegexOptions.Compiled);
string result = regex.Replace(s, String.Empty);
注意:不同的场景需要不同的方法来获得最佳的性能和最小的内存消耗
嗯…我想让你们了解更具体的空间领域。\t实际上被分类为水平空间,而不是垂直空间。(测试在记事本中插入\t)
如果使用Java,只需使用\v即可。请参阅下面的参考资料。
\h -水平空白字符: [\ t \ xA0 \ u1680 \ u180e \ u2000 - \ u200a \ u202f \ u205f \ u3000] \v -垂直空白字符: [f \ r \ n \ x0B \ \ x85 \ u2028 \ u2029]
但我知道你使用。net。所以我替换每个垂直空间的答案是。
string replacement = Regex.Replace(s, @"[\n\u000B\u000C\r\u0085\u2028\u2029]", "");