我有以下格式如何從字符串中刪除換行符?
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();
}
請注意,這種方法將創建兩個中間字符串對象。根據字符串的大小,這可能會導致顯着的性能和內存消耗。 – cdhowie 2010-11-10 02:37:32
如果速度和低內存佔用是重要的,做這樣的事情:
var sb = new StringBuilder(s.Length);
foreach (char i in s)
if (i != '\n' && i != '\r' && i != '\t')
sb.Append(i);
s = sb.ToString();
是的,我也會這樣做(在擴展方法中)。總是很好地使用StringBuilder。 +1 – RPM1984 2010-11-10 02:39:03
「總是很好地使用StringBuilder」<我不是專業人士,但這不是真的。本文[Jeff Atwood的文章](http://blog.codinghorror.com/the-sad-tragedy-of-micro-optimization-theater/)提供了對字符串操作/串聯以及最終優化的有趣見解。 – 2014-07-01 09:29:46
FYI,
Trim()已經做到了。
下LINQPad樣本:
void Main()
{
var s = " \rsdsdsdsd\nsadasdasd\r\n ";
s.Length.Dump();
s.Trim().Length.Dump();
}
輸出:
23
18
慢,這不會刪除\ n在中間。 – FlappySocks 2015-09-26 16:23:59
只是做
s = s.Replace("\n", String.Empty).Replace("\t", String.Empty).Replace("\r", String.Empty);
我知道這是舊的文章,但我想我會分享我用來刪除換行符的方法。
s.Replace(Environment.NewLine, "");
參考文獻:
MSDN String.Replace Method和MSDN Environment.NewLine Property
不錯,支持單聲道 – Nick 2016-06-23 15:57:22
您可以使用Trim
,如果你想從起點和終點刪除。
string stringWithoutNewLine = "\n\nHello\n\n".Trim();
這會解決問題中指定的問題嗎? – 2016-02-23 13:29:54
一個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());' – juharr 2017-01-05 14:29:51
正確的選擇真的取決於輸入字符串有多大,什麼Perforce公司和內存的要求是,但我會用正則表達式像
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]", "");
它看起來像一個其他問題的答案...也缺少實際參考... – 2017-08-23 07:25:14
這對我來說絕對是最好的解決方案。這個C#和JavaScript的平滑混合是我需要解決我的問題。 – 2013-11-26 19:30:20
我有一個類似的問題,我也需要從我的字符串中刪除換行符。我試圖用string.Replace做到這一點,沒有奏效。當我使用與參數完全相同的正則表達式字符串的Regex.Replace時,它工作正常。謝謝。 – instanceof 2016-01-26 08:57:43
如果在處理1M +項目的循環中使用它,請小心。正則表達式比只是String.Replace – Nick 2016-06-23 16:02:34