回答:
正規表現を使うのが好きです。この場合、次のことができます。
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, "");
参照:
速度と低いメモリ使用量が重要な場合は、次のようにします。
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
を呼び出すという一般的なオーバーロードを使用しています。クエリ結果をコンストラクタに渡すだけの方が良いでしょう。 ToString
char
string
s1 = new string(s.Where(....).ToArrary());
正しい選択は、実際には入力文字列の大きさと、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]", "");
ご参考までに、
Trim()はすでにそれを行っています。
次のLINQPadサンプル:
void Main()
{
var s = " \rsdsdsdsd\nsadasdasd\r\n ";
s.Length.Dump();
s.Trim().Length.Dump();
}
出力:
23
18