web-dev-qa-db-ja.com

文字列C#での改行の置き換え

C#の文字列内で改行を置き換える方法はありますか。

460
YonahW

Environment.NewLineに置き換えてください

myString = myString.Replace(System.Environment.NewLine, "replacement text")

他の記事で述べたように、もしその文字列が他の環境(OS)から来たものであれば、 改行制御文字 のその特定の環境実装を置き換える必要があるでしょう。

658
Corin Blaikie

これまでに投稿された解決策はEnvironment.NewLineを置き換えるだけであるか、または置換文字列が改行を含む場合それらはstring.Replaceを複数回呼び出すので失敗します。

これは、正規表現を使用して、文字列を1回通過するだけで3つの置換をすべて実行するソリューションです。これは、置換文字列が改行を安全に含むことができることを意味します。

string result = Regex.Replace(input, @"\r\n?|\n", replacementString);
392
Mark Byers

The.Anyi.9の答えを拡張するために、あなたはまた 一般的な使用において/ - 異なるタイプの改行を認識しているべきです 。あなたのファイルがどこから来たかによりますが、あなたはあなたがすべての代替案を捕らえることを確かめて見たいと思うかもしれません...

string replaceWith = "";
string removedBreaks = Line.Replace("\r\n", replaceWith).Replace("\n", replaceWith).Replace("\r", replaceWith);

軌道に乗る必要があります...

169
ZombieSheep

文字列に改行を挿入したいときはEnvironment.Newlineを使用しますが、文字列からすべての改行を削除することはしません。

あなたのプラットフォームに依存して、あなたは異なるタイプの改行を持つことができます、しかし同じプラットフォームの中でさえもしばしば異なるタイプの改行が使われます。特にファイル形式とプロトコルを扱うとき。

string ReplaceNewlines(string blockOfText, string replaceWith)
{
    return blockOfText.Replace("\r\n", replaceWith).Replace("\n", replaceWith).Replace("\r", replaceWith);
}
34
Brian R. Bondy

あなたのコードが異なる環境で実行されることになっているならば、それは特定の環境で使用されるnewlinename__であるため、Environment.NewLine定数を使用することを検討します。

line = line.Replace(Environment.NewLine, "newLineReplacement");

しかし、他のシステムで作成されたファイルからテキストを取得した場合、これは正しい答えではないかもしれないので、他のシステムで使用されている改行定数に置き換えてください。通常は\nまたは\r\nです。

18
driis

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 );
   }
}
14
tvanfosson

考えられるすべての改行方法(Windows、Mac、Unix)を確実に置き換えるには、次のようにします。

string.Replace("\r\n", "\n").Replace('\r', '\n').Replace('\n', 'replacement');

そして、この順序で、行末文字の組み合わせを見つけたときに余分な改行をしないようにします。

8

\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;
}
6
Zamir

新しい行を「きれいに」したいのなら、regex @"[\r\n]+"を使ったflamebaudコメントが最良の選択です。

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
  }
}
4
ewwink

なぜ両方ではない?

string ReplacementString = "";

Regex.Replace(strin.Replace(System.Environment.NewLine, ReplacementString), @"(\r\n?|\n)", ReplacementString);

注: strinを入力文字列の名前に置き換えてください。

4
RAY
var answer = Regex.Replace(value, "(\n|\r)+", replacementString);
3
Matt Hinze

安全に改行を置き換えるための最良の方法は

yourString.Replace("\r\n","\n") //handling windows linebreaks
.Replace("\r","\n")             //handling mac linebreaks

改行として\ n(例えば改行)だけを含む文字列を生成するはずです。このコードは混在する改行も修正するのに便利です。

2
data

改行は\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");
}
2
Amrik

.Replace()メソッドを使う

Line.Replace("\n", "whatever you want to replace with");
2
The.Anti.9

別の選択肢は、問題の文字列の上に StringReader を作成することです。リーダー上で、.ReadLine()をループしてください。その後、どのような(一貫性または矛盾性のある)区切り文字があっても、行は区切られます。それで、あなたは望むように進むことができます。 1つの可能性は StringBuilder を使用してそれに.AppendLineを呼び出すことです。

利点は、「改行」を構成する要素をフレームワークに決定させることです。

0

改行だけを置き換えたい場合は、

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);
0
Tadej
string s = Regex.Replace(source_string, "\n", "\r\n");

または

string s = Regex.Replace(source_string, "\r\n", "\n");

どちらにしたいかによります。

それが役立つことを願っています。

0
user181261