C # 'da bir dizeye yeni satır ekleme


230

Bir ipim var.

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

Dize "@" sembolü her oluşumundan sonra bir satırsonu eklemeniz gerekir.

Çıktım böyle olmalı

fkdfdsfdflkdkfk@
dfsdfjk72388389@
kdkfkdfkkl@
jkdjkfjd@
jjjk@

2
"satırsonu metin dosyasında etkili değil" ile ne demek istiyorsun? Metin dosyasına nasıl yazıyorsunuz?
Mark Cidade

5
Dosyayı yazmak için kullandığınız kodu gönderin. \ r \ n (windows - Environment.Newline) veya \ n (Unix) çalışmalı ...
Gishu

Yanıtlar:


482

Environment.NewLineHerhangi bir dizede istediğiniz zaman kullanın . Bir örnek:

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

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

1
Ama bu bilgiyi böyle bir metin dosyasına yazmam gerekiyor fkdfdsfdflkdkfk @ dfsdfjk72388389 @ kdkfkdfkkl @ jkdjkfjd @ jjjk @ Yeni satır karakteri metin dosyasında etkili değil.
balaweblog

System.String (takma ad string) değişmez bir nesne olduğu için bu iyi bir çözüm değildir , yani tüm dizenin kopyalandığı anlamına gelir. String.Replace gibi işlemler için bir System.Text.StringBuilder nesnesi kullanmak daha iyidir.
ぐ イ き ん ぐ

@Alexander Dize işlemlerinin verimsiz olduğunu söyleyebilirim, 2019'da artık endişelenmemiz gerekmeyen bir sorun.
Filipe Madureira

2
@FilipeMadureira birçok yönden çok yanlış. Donanım iyileştirmeleri olsun ya da olmasın, bilerek kötü bir programcı olmak için hiçbir bahane yoktur. Bunu nasıl daha iyi yapacağımızı bilirsek yapmalıyız. Bunun yanı sıra, bir veritabanı sistemindeki temel bir özellikte kullanılan bir kütüphanede uyguladığınızı hayal edin - yüksek performans istersiniz.
ぐ イ き ん ぐ

@Alexander İyi bir programcı olmak, yalnızca teslim tarihleri ​​/ kötü işleri / patronları olmayan kişilerin sahip olabileceği bir lüks, aksi takdirde size katılıyorum. Demek istediğim ilk başta netti.
Filipe Madureira

70

@ Simgesinden sonra aşağıdaki gibi yeni bir satır karakteri ekleyebilirsiniz:

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

Ayrıca NewLineözelliği EnvironmentSınıf içinde kullanabilirsiniz (Ben Çevre olduğunu düşünüyorum).


1
Ama bu bilgiyi böyle bir metin dosyasına yazmam gerekiyor fkdfdsfdflkdkfk @ dfsdfjk72388389 @ kdkfkdfkkl @ jkdjkfjd @ jjjk @ Yeni satır karakteri metin dosyasında etkili değil.
balaweblog

18

Önceki cevaplar yaklaşıyor, ancak @sembolün yakın kalması için gerçek gereksinimi karşılamak için bunun olmasını istersiniz str.Replace("@", "@" + System.Environment.NewLine). Bu, @sembolü koruyacak ve geçerli platform için uygun yeni satır karakterlerini ekleyecektir.


9

Ardından, önceki yanıtları şu şekilde değiştirin:

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

Metin dosyasındaki yeni satırları istemiyorsanız, bunu korumayın.


6

Basit bir dize değiştirme işi yapacak. Aşağıdaki örnek programa bir göz atın:

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

Diğerlerinin söylediği gibi yeni satır karakterleri, pencerelerdeki bir metin dosyasında size yeni bir satır verecektir. takip etmeyi dene:

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

Sadece ortamınızı gördüm.newline == \ r \ n = true (belki C # sözdizimi olmadığı için özledim);). Ayrıca, burada daha fazla bilgi msdn.microsoft.com/de-de/library/… . Sadece hardcoded kullanarak benzer bir sorun üzerinde tökezledi \ n bana pencerelerde yeni bir satır vermiyor ..
Andreas Reiff

3

Diğer herkese verdiğiniz yanıtlara dayanarak, aradığınız şey şudur.

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

Çıktı


2
Bu kod soruyu cevaplayabilirken, bu kodun soruyu neden ve / veya nasıl cevapladığı konusunda ek bağlam sağlamak uzun vadeli değerini arttırır.
Thomas Flinkow

0

Ayrıca kullanabilirsiniz string[] something = text.Split('@'). "@" İşaretini kuşatmak için tek tırnak işareti kullandığınızdan emin olun char. Bu, diziye ayrı ayrı kelimeler olarak her "@" işaretine kadar olan karakterleri kaydeder. Daha sonra element + System.Environment.NewLinefor döngüsünü kullanarak her ( ) çıktısını alabilir veya kullanarak bir metin dosyasına yazabilirsiniz System.IO.File.WriteAllLines([file path + name and extension], [array name]). Belirtilen dosya bu konumda yoksa, otomatik olarak oluşturulur.


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 topluluğuna hoş geldiniz. Soruyu cevapladığınız için teşekkür ederiz. Ancak bunun neden işe yaradığına dair bazı açıklamalar eklemek iyi bir uygulamadır.
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);
    }
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.