C#で文字列内の改行を置き換えるにはどうすればよいですか?
C#で文字列内の改行を置き換えるにはどうすればよいですか?
回答:
置換を使用 Environment.NewLine
myString = myString.Replace(System.Environment.NewLine, "replacement text"); //add a line terminating ;
他の投稿で述べたように、文字列が別の環境(OS)からのものである場合は、その特定の環境の新しい行制御文字の実装を置き換える必要があります。
これまでに投稿されたソリューションEnvironment.NewLine
は、置換のみを行うか、置換文字列にstring.Replace
複数回呼び出されるため改行が含まれている場合は失敗します。
これは、正規表現を使用して、文字列を1回パスするだけで3つすべての置換を行うソリューションです。つまり、置換文字列には改行を安全に含めることができます。
string result = Regex.Replace(input, @"\r\n?|\n", replacementString);
The.Anyi.9の答えを拡張するには、一般的に使用されるさまざまな種類の改行にも注意する必要があります。あなたのファイルがどこから来たかに依存して、あなたはあなたがすべての選択肢をキャッチすることを確認することを見たいかもしれません...
string replaceWith = "";
string removedBreaks = Line.Replace("\r\n", replaceWith).Replace("\n", replaceWith).Replace("\r", replaceWith);
あなたを始めるべきだ...
Line.Replace("\n", replaceWith).Replace("\r", replaceWith);
十分ではありませんか?
\r\n
場合、置換文字列が2回になるため、理想的ではありません。
文字列の改行を挿入したいが、文字列からすべての改行を削除したくない場合は、Environment.Newlineを使用します。
プラットフォームによっては、異なるタイプの改行を使用できますが、同じプラットフォーム内でも、異なるタイプの改行が使用されることがよくあります。特にファイル形式とプロトコルを扱う場合。
string ReplaceNewlines(string blockOfText, string replaceWith)
{
return blockOfText.Replace("\r\n", replaceWith).Replace("\n", replaceWith).Replace("\r", replaceWith);
}
コードが異なる環境で実行されることになっている場合は、Environment.NewLine
定数を使用することを検討します。定数newline
は特定の環境で使用されるためです。
line = line.Replace(Environment.NewLine, "newLineReplacement");
ただし、別のシステムで作成されたファイルからテキストを取得する場合、これは正しい答えではない可能性があるため、他のシステムで使用されている改行定数で置き換える必要があります。通常は\n
またはになり\r\n
ます。
replaceは文字列の置き換えを行わないが、文字が置き換えられた新しい文字列を返すことを忘れないでください。以下は改行を削除します(それらを置き換えません)。@Brian R. Bondyのメソッドを、拡張メソッドとしてラップされている他のもので置き換える場合は、それを使用します。Replaceまたは提供されている拡張メソッドを呼び出す前に、まずnull値を確認してください。
string line = ...
line = line.Replace( "\r", "").Replace( "\n", "" );
拡張メソッドとして:
public static class StringExtensions
{
public static string RemoveLineBreaks( this string lines )
{
return lines.Replace( "\r", "").Replace( "\n", "" );
}
public static string ReplaceLineBreaks( this string lines, string replacement )
{
return lines.Replace( "\r\n", replacement )
.Replace( "\r", replacement )
.Replace( "\n", replacement );
}
}
''
C#では使用できません。空の文字などはありません。う'\0'
の代わりに動作しますか?
string.Empty
が良かったら是非使ってください。
新しい行を「クリーン」にしたい場合@"[\r\n]+"
は、正規表現を使用したフレームボーコメントが最適です。
using System;
using System.Text.RegularExpressions;
class MainClass {
public static void Main (string[] args) {
string str = "AAA\r\nBBB\r\n\r\n\r\nCCC\r\r\rDDD\n\n\nEEE";
Console.WriteLine (str.Replace(System.Environment.NewLine, "-"));
/* Result:
AAA
-BBB
-
-
-CCC
DDD---EEE
*/
Console.WriteLine (Regex.Replace(str, @"\r\n?|\n", "-"));
// Result:
// AAA-BBB---CCC---DDD---EEE
Console.WriteLine (Regex.Replace(str, @"[\r\n]+", "-"));
// Result:
// AAA-BBB-CCC-DDD-EEE
}
}
を\r\n
実際のキャリッジリターンとラインフィードに置き換え\t
、実際のタブに置き換える必要がありました。だから私は次のことを思いつきました:
public string Transform(string data)
{
string result = data;
char cr = (char)13;
char lf = (char)10;
char tab = (char)9;
result = result.Replace("\\r", cr.ToString());
result = result.Replace("\\n", lf.ToString());
result = result.Replace("\\t", tab.ToString());
return result;
}
.Replace()メソッドを使用する
Line.Replace("\n", "whatever you want to replace with");
新ラインのようで区切ることができ\n
、\r
そして\r\n
最初の我々は交換するだろう、\r
と\r\n
して\n
、とだけにして、分割データ列。
次の行はparseCSV
メソッドに移動する必要があります。
function parseCSV(data) {
//alert(data);
//replace UNIX new lines
data = data.replace(/\r\n/g, "\n");
//replace MAC new lines
data = data.replace(/\r/g, "\n");
//split into rows
var rows = data.split("\n");
}
string s = Regex.Replace(source_string, "\n", "\r\n");
または
string s = Regex.Replace(source_string, "\r\n", "\n");
どちらに行きたいかによります。
それが役に立てば幸い。
別のオプションはStringReader
、問題の文字列の上にオーバーを作成することです。リーダーでは.ReadLine()
、ループで行います。次に、行の区切り記号(一貫性または不整合性)に関係なく、行を分離します。これで、希望どおりに続行できます。一つの可能性は使用aにありStringBuilder
、コール.AppendLine
ことです。
利点は、何が「改行」を構成するかをフレームワークに決定させることです。
改行だけを置き換えたい場合:
var input = @"sdfhlu \r\n sdkuidfs\r\ndfgdgfd";
var match = @"[\\ ]+";
var replaceWith = " ";
Console.WriteLine("input: " + input);
var x = Regex.Replace(input.Replace(@"\n", replaceWith).Replace(@"\r", replaceWith), match, replaceWith);
Console.WriteLine("output: " + x);
改行、タブ、空白を置き換える場合:
var input = @"sdfhlusdkuidfs\r\ndfgdgfd";
var match = @"[\\s]+";
var replaceWith = "";
Console.WriteLine("input: " + input);
var x = Regex.Replace(input, match, replaceWith);
Console.WriteLine("output: " + x);