如何从string中删除新的行字符?
我有以下格式的string
string s = "This is a Test String.\n This is a next line.\t This is a tab.\n'
我想从上面的string中删除\n
和\r
所有事件。
我已经尝试过string s = s.Trim(new char[] {'\n', '\r'});
但它没有帮助。
我喜欢使用正则expression式。 在这种情况下,你可以这样做:
string replacement = Regex.Replace(s, @"\t|\n|\r", "");
正则expression式在.NET世界中并不像在dynamic语言中那样受欢迎,但是它们提供了大量的操作string的能力。
你想使用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)
只能从调用的实例中删除String.Trim(params char[] trimChars)
中的前导字符和尾随字符。
你可以做一个扩展方法,避免了上面做很多临时string的性能问题:
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(); }
我知道这是一个旧的post,但我想我会分享我用来删除新行字符的方法。
s.Replace(Environment.NewLine, "");
参考文献:
MSDN String.Replace方法和MSDN Environment.NewLine属性
如果速度和低内存使用率很重要,请做这样的事情:
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'));
正确的select实际上取决于inputstring有多大,以及perforce和内存要求是什么,但是我会使用正则expression式
string result = Regex.Replace(s, @"\r\n?|\n|\t", String.Empty);
或者,如果我们需要多次应用相同的replace,最好使用正则expression式的编译版本
var regex = new Regex(@"\r\n?|\n|\t", RegexOptions.Compiled); string result = regex.Replace(s, String.Empty);
注意:不同的scheme要求不同的方法来实现最佳性能和最小内存消耗
那么…我希望你了解更具体的空间领域。 \t
实际上是作为一个水平空间来分类的,而不是一个垂直空间。 (testing在记事本中插入\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]", "");
仅供参考,
修剪()已经做到了。
以下的LINQPad示例:
void Main() { var s = " \rsdsdsdsd\nsadasdasd\r\n "; s.Length.Dump(); s.Trim().Length.Dump(); }
输出:
23 18
如果要从开始和结束中删除,可以使用Trim
。
string stringWithoutNewLine = "\n\nHello\n\n".Trim();