C#で文字列に改行を追加する


230

紐があります。

string strToProcess = "fkdfdsfdflkdkfk@dfsdfjk72388389@kdkfkdfkkl@jkdjkfjd@jjjk@";

文字列に「@」記号が出現するたびに改行を追加する必要があります。

私の出力はこのようになるはずです

fkdfdsfdflkdkfk@
dfsdfjk72388389@
kdkfkdfkkl@
jkdjkfjd@
jjjk@

2
「改行がテキストファイルで有効でない」とはどういう意味ですか?テキストファイルにどのように書き込んでいますか?
Mark Cidade、

5
ファイルの書き出しに使用するコードを投稿します。\ r \ n(windows-Environment.Newline)または\ n(Unix)は動作するはずです...
Gishu '22 / 10/22

回答:


482

Environment.NewLine任意の文字列でいつでも使用できます。例:

string text = "fkdfdsfdflkdkfk@dfsdfjk72388389@kdkfkdfkkl@jkdjkfjd@jjjk@";

text = text.Replace("@", "@" + System.Environment.NewLine);

1
しかし、この情報を次のようにテキストファイルに書き込む必要がありますfkdfdsfdflkdkfk @ dfsdfjk72388389 @ kdkfkdfkkl @ jkdjkfjd @ jjjk @改行文字はテキストファイルでは有効ではありません。
balaweblog 2008年

System.String(エイリアスstring)は不変オブジェクトであるため、これは適切なソリューションではありません。つまり、文字列全体がコピーされます。String.Replaceなどの操作には、System.Text.StringBuilderオブジェクトを使用する方が適切です。
ワイキんぐ

私はその文字列操作は非効率的であることを言う問題であると思います@Alexander我々は、2019年にはもう心配する必要はありません
フィリペMadureira

2
@FilipeMadureiraそれは多くの点で非常に間違っています。ハードウェアの改善の有無にかかわらず、故意に悪いプログラマーであることの言い訳はありません。私たちがそれをよりよく行う方法を知っているなら、私たちはすべきです。データベースシステムのコア機能で使用されているライブラリにこれを実装することを想像してください-高いパフォーマンスが必要です。
ワイキんぐ

@Alexander優れたプログラマーになることは、締め切りがない/悪い仕事/上司が持つことができる贅沢なことです。そうでなければ、私はあなたに同意します。最初は自分のポイントがはっきりしていると思いました。
フィリペマドゥレイラ

70

次のように、@記号の後に改行文字を追加できます。

string newString = oldString.Replace("@", "@\n");  

クラスでNewLineプロパティを使用することもできEnvironmentます(環境だと思います)。


1
しかし、この情報を次のようなテキストファイルに書き込む必要があります。
balaweblog 2008年

18

以前の答えは近づいていますが、@シンボルが近くに留まるという実際の要件を満たすには、それをにする必要がありますstr.Replace("@", "@" + System.Environment.NewLine)。これにより、@シンボルが保持され、現在のプラットフォームに適切な改行文字が追加されます。


9

次に、前の回答を次のように変更します。

Console.Write(strToProcess.Replace("@", "@" + Environment.NewLine));

テキストファイルの改行が不要な場合は、保持しないでください。


6

単純な文字列置換で十分です。以下のサンプルプログラムを見てください:

using System;

namespace NewLineThingy
{
    class Program
    {
        static void Main(string[] args)
        {
            string str = "fkdfdsfdflkdkfk@dfsdfjk72388389@kdkfkdfkkl@jkdjkfjd@jjjk@";
            str = str.Replace("@", "@" + Environment.NewLine);
            Console.WriteLine(str);
            Console.ReadKey();
        }
    }
}

6

他の人が言ったように、改行文字はウィンドウのテキストファイルに改行を与えるでしょう。以下を試してください:

using System;
using System.IO;

static class Program
{
    static void Main()
    {
        WriteToFile
        (
        @"C:\test.txt",
        "fkdfdsfdflkdkfk@dfsdfjk72388389@kdkfkdfkkl@jkdjkfjd@jjjk@",
        "@"
        );

        /*
        output in test.txt in windows =
        fkdfdsfdflkdkfk@
        dfsdfjk72388389@
        kdkfkdfkkl@
        jkdjkfjd@
        jjjk@ 
        */
    }

    public static void WriteToFile(string filename, string text, string newLineDelim)
    {
        bool equal = Environment.NewLine == "\r\n";

        //Environment.NewLine == \r\n = True
        Console.WriteLine("Environment.NewLine == \\r\\n = {0}", equal);

        //replace newLineDelim with newLineDelim + a new line
        //trim to get rid of any new lines chars at the end of the file
        string filetext = text.Replace(newLineDelim, newLineDelim + Environment.NewLine).Trim();

        using (StreamWriter sw = new StreamWriter(File.OpenWrite(filename)))
        {
            sw.Write(filetext);
        }
    }
}

あなたの環境を見ただけです。newline == \ r \ n = true(多分それはC#構文ではないので私はそれを逃しました;))また、こちらの詳細情報msdn.microsoft.com/de-de/library/…。ただ、nは私のウィンドウに新しい行を与えていない\ハードコード使用して同様の問題..つまずい
アンドレアスReiff

3

他のすべての人への返信に基づいて、このようなものがあなたが探しているものです。

string file = @"C:\file.txt";
string strToProcess = "fkdfdsfdflkdkfk@dfsdfjk72388389@kdkfkdfkkl@jkdjkfjd@jjjk@";
string[] lines = strToProcess.Split(new char[] { '@' }, StringSplitOptions.RemoveEmptyEntries);

using (StreamWriter writer = new StreamWriter(file))
{
    foreach (string line in lines)
    {
        writer.WriteLine(line + "@");
    }
}

2
string str = "fkdfdsfdflkdkfk@dfsdfjk72388389@kdkfkdfkkl@jkdjkfjd@jjjk@";
str = str.Replace("@", Environment.NewLine);
richTextBox1.Text = str;

2
string strToProcess = "fkdfdsfdflkdkfk@dfsdfjk72388389@kdkfkdfkkl@jkdjkfjd@jjjk@";
var result = strToProcess.Replace("@", "@ \r\n");
Console.WriteLine(result);

出力


2
このコードは質問に答えることがありますが、このコードが質問に答える理由や方法に関する追加のコンテキストを提供すると、長期的な価値が向上します。
Thomas Flinkow、2018年

0

も使用できますstring[] something = text.Split('@')。「@」をcharタイプとして格納するには、一重引用符を使用してください。これにより、各「@」までの文字が配列内の個々の単語として格納されます。その後element + System.Environment.NewLine、forループを使用して各()を出力するか、を使用してテキストファイルに書き込むことができますSystem.IO.File.WriteAllLines([file path + name and extension], [array name])。指定したファイルがその場所に存在しない場合は、自動的に作成されます。


0
protected void Button1_Click(object sender, EventArgs e)
{
    string str = "fkdfdsfdflkdkfk@dfsdfjk72388389@kdkfkdfkkl@jkdjkfjd@jjjk@";
    str = str.Replace("@", "@" + "<br/>");
    Response.Write(str);       
}

1
SOコミュニティへようこそ。質問にお答えいただきありがとうございます。ただし、これが機能する理由について説明を追加することをお勧めします。
phuzi

0
using System;
using System.IO;
using System.Text;

class Test
{
    public static void Main()
    {
             string strToProcess = "fkdfdsfdflkdkfk@dfsdfjk72388389@kdkfkdfkkl@jkdjkfjd@jjjk@";
            strToProcess.Replace("@", Environment.NewLine);
            Console.WriteLine(strToProcess);
    }
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.