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@

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);

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).


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.


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.


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();
        }
    }
}

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

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 + "@");
    }
}

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);

Keluaran


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.


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

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);
    }
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.