การเพิ่มบรรทัดใหม่ในสตริงใน 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

คำตอบ:


482

ใช้Environment.NewLineเมื่อใดก็ตามที่คุณต้องการในสตริงใด ๆ ตัวอย่าง:

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

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

1
แต่ฉันต้องเขียนข้อมูลนี้ในไฟล์ข้อความเช่นนี้ fkdfdsfdflkdkfk @ dfsdfjk72388389 @ kdkfkdfkkl @ jkdjkfjd @ jjjk @ อักขระบรรทัดใหม่ไม่มีประสิทธิภาพในไฟล์ข้อความ
balaweblog

นี่ไม่ใช่ทางออกที่ดีเนื่องจาก System.String (นามแฝงstring) เป็นวัตถุที่ไม่เปลี่ยนรูปซึ่งหมายความว่าสตริงทั้งหมดจะถูกคัดลอกไป ดีกว่าที่จะใช้วัตถุ System.Text.StringBuilder สำหรับการดำเนินการเช่น String.Replace
ワイきんぐ

@Alexander ฉันจะบอกว่าการดำเนินงานสายไม่มีประสิทธิภาพเป็นปัญหาที่เราไม่ต้องกังวลอีกต่อไปในปี 2019
Filipe Madureira

2
@FilipeMadureira ที่ผิดในหลาย ๆ ทาง การปรับปรุงฮาร์ดแวร์หรือไม่ไม่มีข้อแก้ตัวสำหรับการเป็นโปรแกรมเมอร์ที่ไม่ดีตามวัตถุประสงค์ ถ้าเรารู้วิธีที่จะทำได้ดีกว่าที่เราควรทำ นอกจากนี้ลองนึกภาพการใช้สิ่งนี้ในห้องสมุดซึ่งถูกใช้ในคุณสมบัติหลักในระบบฐานข้อมูล - คุณต้องการประสิทธิภาพสูง
ワイきんぐ

@ อเล็กซานเดอร์การเป็นโปรแกรมเมอร์ที่ดีเป็นสิ่งที่หรูหราสำหรับคนที่ไม่มีกำหนดเวลา / งานไม่ดี / ผู้บังคับบัญชาสามารถมีได้ ฉันคิดว่าจุดแรกของฉันชัดเจน
Filipe Madureira

70

คุณสามารถเพิ่มอักขระบรรทัดใหม่หลังสัญลักษณ์ @ ดังนี้:

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

คุณยังสามารถใช้NewLineคุณสมบัตินี้ในEnvironmentคลาสได้ (ฉันคิดว่ามันเป็นสภาพแวดล้อม)


1
แต่ฉันต้องเขียนข้อมูลนี้ในไฟล์ข้อความเช่นนี้ fkdfdsfdflkdkfk @ dfsdfjk72388389 @ kdkfkdfkkl @ jkdjkfjd @ jjjk @ อักขระบรรทัดใหม่ไม่มีประสิทธิภาพในไฟล์ข้อความ
balaweblog

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

ดังที่คนอื่น ๆ ได้กล่าวไว้บรรทัดใหม่จะให้บรรทัดใหม่ในไฟล์ข้อความใน windows ลองต่อไปนี้:

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

เห็น environment.newline ของคุณเท่านั้น == \ r \ n = จริงตอนนี้ (บางทีฉันอาจพลาดเพราะไม่ใช่ไวยากรณ์ C #;) นอกจากนี้ข้อมูลเพิ่มเติมได้ที่นี่msdn.microsoft.com/de-de/library/... เพิ่งสะดุดกับปัญหาที่คล้ายกันกับการใช้ hardcoded \ n ไม่ให้ฉันขึ้นบรรทัดใหม่ใน windows ..
Andreas 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 strToProcess = "fkdfdsfdflkdkfk@dfsdfjk72388389@kdkfkdfkkl@jkdjkfjd@jjjk@";
var result = strToProcess.Replace("@", "@ \r\n");
Console.WriteLine(result);

เอาท์พุต


2
ในขณะที่รหัสนี้อาจตอบคำถาม แต่มีบริบทเพิ่มเติมเกี่ยวกับสาเหตุและ / หรือวิธีการที่รหัสนี้ตอบคำถามช่วยปรับปรุงมูลค่าระยะยาว
โทมัส Flinkow

0

string[] something = text.Split('@')นอกจากนี้คุณยังสามารถใช้ ตรวจสอบให้แน่ใจว่าคุณใช้เครื่องหมายคำพูดเดี่ยวเพื่อล้อม "@" เพื่อเก็บไว้เป็นcharประเภท การดำเนินการนี้จะเก็บอักขระได้สูงสุดและรวม "@" แต่ละคำเป็นคำแต่ละคำในอาร์เรย์ จากนั้นคุณสามารถส่งออกแต่ละ ( element + System.Environment.NewLine) 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.