Menambahkan baris baru ke string di C #

230

Saya punya string.

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

Saya perlu menambahkan baris baru setelah setiap kemunculan simbol "@" di string.

Keluaran saya harus seperti ini

fkdfdsfdflkdkfk@
dfsdfjk72388389@
kdkfkdfkkl@
jkdjkfjd@
jjjk@
balaweblog
sumber
2
apa yang Anda maksud dengan "baris baru tidak efektif dalam file teks"? Bagaimana Anda menulis ke file teks?
Mark Cidade
5
Posting kode yang Anda gunakan untuk menulis file. \ r \ n (windows - Environment.Newline) atau \ n (Unix) seharusnya berfungsi ...
Gishu

Jawaban:

482

Gunakan Environment.NewLinekapan pun Anda inginkan dalam string apa pun. Sebuah contoh:

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

text = text.Replace("@", "@" + System.Environment.NewLine);
CMS
sumber
1
Tetapi saya perlu menulis informasi ini dalam file teks seperti ini fkdfdsfdflkdkfk @ dfsdfjk72388389 @ kdkfkdfkkl @ jkdjkfjd @ jjjk @ Karakter baris baru tidak efektif dalam file teks.
balaweblog
Ini bukan solusi yang baik, karena System.String (alias string) adalah objek yang tidak dapat diubah, yang berarti bahwa seluruh string sedang disalin. Lebih baik menggunakan objek System.Text.StringBuilder untuk operasi seperti String.Replace.
ワ イ き ん ぐ
@Alexander Saya akan mengatakan bahwa operasi string menjadi tidak efisien adalah masalah yang tidak perlu kita khawatirkan lagi pada tahun 2019.
Filipe Madureira
2
@FilipeMadureira yang sangat salah dalam banyak hal. Perbaikan perangkat keras atau tidak, tidak pernah ada alasan untuk menjadi programmer yang buruk dengan sengaja. Jika kita tahu bagaimana melakukannya dengan lebih baik, kita harus melakukannya. Selain itu bayangkan menerapkan ini di perpustakaan yang sedang digunakan dalam fitur inti dalam sistem database - Anda ingin kinerja tinggi.
ワ イ き ん ぐ
@Alexander Menjadi programmer yang baik adalah kemewahan yang hanya dimiliki oleh orang-orang yang tidak memiliki tenggat waktu / pekerjaan buruk / bos, jika tidak, saya setuju dengan Anda. Saya pikir poin saya jelas pada awalnya.
Filipe Madureira
70

Anda dapat menambahkan karakter baris baru setelah simbol @ seperti:

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

Anda juga dapat menggunakan NewLineproperti di EnvironmentKelas (saya pikir itu Lingkungan).

Jason
sumber
1
Tetapi saya perlu menulis informasi ini dalam file teks seperti ini fkdfdsfdflkdkfk @ dfsdfjk72388389 @ kdkfkdfkkl @ jkdjkfjd @ jjjk @ Karakter baris baru tidak efektif dalam file teks.
balaweblog
18

Jawaban sebelumnya datang dekat, tetapi untuk memenuhi persyaratan aktual bahwa @simbol tetap dekat, Anda menginginkannya str.Replace("@", "@" + System.Environment.NewLine). Itu akan menyimpan @simbol dan menambahkan karakter baris baru yang sesuai untuk platform saat ini.

Marcus Griep
sumber
9

Kemudian cukup modifikasi jawaban sebelumnya untuk:

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

Jika Anda tidak ingin baris baru dalam file teks, maka jangan simpan.

Benjamin Autin
sumber
6

Mengganti string sederhana akan melakukan pekerjaan. Lihatlah contoh program di bawah ini:

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();
        }
    }
}
Jason Jackson
sumber
6

seperti yang orang lain katakan baris char baru akan memberi Anda baris baru dalam file teks di windows. coba yang berikut ini:

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);
        }
    }
}
Telah
sumber
Hanya melihat environment.newline Anda == \ r \ n = true sekarang (mungkin saya melewatkannya karena ini bukan sintaks C #;)). Juga, info lebih lanjut di sini msdn.microsoft.com/de-de/library/… . Baru saja menemukan masalah yang sama dengan menggunakan hardcoded \ n tidak memberi saya baris baru di windows ..
Andreas Reiff
3

Berdasarkan balasan Anda kepada orang lain, sesuatu seperti ini adalah yang Anda cari.

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 + "@");
    }
}
Timothy Carter
sumber
2
string str = "fkdfdsfdflkdkfk@dfsdfjk72388389@kdkfkdfkkl@jkdjkfjd@jjjk@";
str = str.Replace("@", Environment.NewLine);
richTextBox1.Text = str;
Glinas
sumber
2
string strToProcess = "fkdfdsfdflkdkfk@dfsdfjk72388389@kdkfkdfkkl@jkdjkfjd@jjjk@";
var result = strToProcess.Replace("@", "@ \r\n");
Console.WriteLine(result);

Keluaran

Kathiravan C
sumber
2
Sementara kode ini dapat menjawab pertanyaan, memberikan konteks tambahan tentang mengapa dan / atau bagaimana kode ini menjawab pertanyaan meningkatkan nilai jangka panjangnya.
Thomas Flinkow
0

Anda juga bisa menggunakannya string[] something = text.Split('@'). Pastikan Anda menggunakan tanda kutip tunggal untuk mengelilingi "@" untuk menyimpannya sebagai chartipe. Ini akan menyimpan karakter hingga dan termasuk setiap "@" sebagai kata-kata individual dalam array. Anda kemudian dapat mengeluarkan masing-masing ( element + System.Environment.NewLine) menggunakan for for atau menulisnya ke file teks menggunakan System.IO.File.WriteAllLines([file path + name and extension], [array name]). Jika file yang ditentukan tidak ada di lokasi itu akan dibuat secara otomatis.

TehSpowage
sumber
0
protected void Button1_Click(object sender, EventArgs e)
{
    string str = "fkdfdsfdflkdkfk@dfsdfjk72388389@kdkfkdfkkl@jkdjkfjd@jjjk@";
    str = str.Replace("@", "@" + "<br/>");
    Response.Write(str);       
}
Papun Sahoo
sumber
1
Selamat datang di komunitas SO. Terima kasih telah menjawab pertanyaan. Namun itu praktik yang baik untuk menambahkan beberapa penjelasan mengapa ini bekerja.
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);
    }
}
FAREH
sumber