【发布时间】:2010-11-10 02:32:21
【问题描述】:
我有一个格式如下的字符串
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'});,但没有帮助。
【问题讨论】:
我喜欢使用正则表达式。在这种情况下,您可以这样做:
string replacement = Regex.Replace(s, @"\t|\n|\r", "");
正则表达式在 .NET 世界中不像在动态语言中那样流行,但它们提供了强大的字符串操作能力。
【讨论】:
您想使用String.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();
}
【讨论】:
我知道这是一篇旧帖子,但我想我会分享我用来删除换行符的方法。
s.Replace(Environment.NewLine, "");
参考文献:
MSDN String.Replace Method 和 MSDN Environment.NewLine Property
【讨论】:
如果速度和低内存使用很重要,请执行以下操作:
var sb = new StringBuilder(s.Length);
foreach (char i in s)
if (i != '\n' && i != '\r' && i != '\t')
sb.Append(i);
s = sb.ToString();
【讨论】:
就这样吧
s = s.Replace("\n", String.Empty).Replace("\t", String.Empty).Replace("\r", String.Empty);
【讨论】:
一种 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.Join 的通用重载,它将在查询返回的每个char 上调用ToString。最好将查询结果传递给string 构造函数。 s1 = new string(s.Where(....).ToArrary());
正确的选择实际上取决于输入字符串的大小以及性能和内存要求是什么,但我会使用像
这样的正则表达式string result = Regex.Replace(s, @"\r\n?|\n|\t", String.Empty);
或者如果我们需要多次应用相同的替换,最好使用正则表达式的编译版本
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- 垂直空白字符:
[\n\x0B\f\r\x85\u2028\u2029]
但我知道您使用的是 .NET。所以我替换每个垂直空间的答案是..
string replacement = Regex.Replace(s, @"[\n\u000B\u000C\r\u0085\u2028\u2029]", "");
【讨论】:
string remove = Regex.Replace(txtsp.Value).ToUpper(), @"\t|\n|\r", "");
【讨论】:
如果你想从开始和结束中删除,你可以使用Trim。
string stringWithoutNewLine = "\n\nHello\n\n".Trim();
【讨论】:
仅供参考,
Trim() 已经这样做了。
以下 LINQPad 示例:
void Main()
{
var s = " \rsdsdsdsd\nsadasdasd\r\n ";
s.Length.Dump();
s.Trim().Length.Dump();
}
输出:
23
18
【讨论】: