Thêm một dòng mới vào một chuỗi trong C #


230

Tôi có một chuỗi.

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

Tôi cần thêm một dòng mới sau mỗi lần xuất hiện biểu tượng "@" trong chuỗi.

Đầu ra của tôi phải như thế này

fkdfdsfdflkdkfk@
dfsdfjk72388389@
kdkfkdfkkl@
jkdjkfjd@
jjjk@

2
ý bạn là gì bởi "dòng mới không hiệu quả trong tệp văn bản"? Làm thế nào bạn viết vào tập tin văn bản?
Đánh dấu Cidade

5
Gửi mã bạn sử dụng để viết tệp ra. \ r \ n (windows - Môi trường. Dòng mới) hoặc \ n (Unix) sẽ hoạt động ...
Gishu

Câu trả lời:


482

Sử dụng Environment.NewLinebất cứ khi nào bạn muốn trong bất kỳ chuỗi. Một ví dụ:

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

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

1
Nhưng tôi cần phải viết thông tin này trong một tệp văn bản như thế này fkdfdsfdflkdkfk @ dfsdfjk72388389 @ kdkfkdfkkl @ jkdjkfjd @ jjjk @ Ký tự dòng mới không hiệu quả trong tệp văn bản.
balaweblog

Đây không phải là một giải pháp tốt, vì System.String (bí danh string) là một đối tượng bất biến, có nghĩa là toàn bộ chuỗi đang được sao chép. Tốt hơn là sử dụng một đối tượng System.Text.StringBuilder cho các hoạt động như String.Replace.
ワ イ き

@Alexander Tôi muốn nói rằng các hoạt động chuỗi không hiệu quả là một vấn đề chúng ta không phải lo lắng nữa vào năm 2019.
Filipe Madureira

2
@FilipeMadureira thật sai lầm trong nhiều cách. Cải thiện phần cứng hay không, không bao giờ có lý do để trở thành một lập trình viên tồi về mục đích. Nếu chúng ta biết làm thế nào để làm điều đó tốt hơn chúng ta nên. Bên cạnh việc tưởng tượng thực hiện điều này trong một thư viện đang được sử dụng trong một tính năng cốt lõi trong hệ thống cơ sở dữ liệu - bạn sẽ muốn hiệu suất cao.
ワ イ き

@Alexander Trở thành một lập trình viên giỏi là một thứ xa xỉ chỉ những người không có thời hạn / công việc tồi / ông chủ mới có thể có, nếu không, tôi đồng ý với bạn. Tôi nghĩ rằng quan điểm của tôi là rõ ràng lúc đầu.
Filipe Madureira

70

Bạn có thể thêm một ký tự dòng mới sau biểu tượng @ như vậy:

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

Bạn cũng có thể sử dụng thuộc NewLinetính trong EnvironmentLớp (Tôi nghĩ đó là Môi trường).


1
Nhưng tôi cần phải viết thông tin này trong một tệp văn bản như thế này fkdfdsfdflkdkfk @ dfsdfjk72388389 @ kdkfkdfkkl @ jkdjkfjd @ jjjk @ Ký tự dòng mới không hiệu quả trong tệp văn bản.
balaweblog

18

Các câu trả lời trước đến gần, nhưng để đáp ứng yêu cầu thực tế là @biểu tượng ở gần, bạn muốn điều đó xảy ra str.Replace("@", "@" + System.Environment.NewLine). Điều đó sẽ giữ @biểu tượng và thêm (các) ký tự dòng mới phù hợp cho nền tảng hiện tại.


9

Sau đó, chỉ cần sửa đổi các câu trả lời trước đó thành:

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

Nếu bạn không muốn các dòng mới trong tệp văn bản, thì đừng giữ nó.


6

Một chuỗi thay thế đơn giản sẽ làm công việc. Hãy xem chương trình ví dụ dưới đây:

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

như những người khác đã nói dòng char mới sẽ cung cấp cho bạn một dòng mới trong tệp văn bản trong windows. hãy thử như sau:

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

Chỉ thấy môi trường của bạn.newline == \ r \ n = true ngay bây giờ (có thể tôi đã bỏ lỡ vì đó không phải là cú pháp C #;)). Ngoài ra, thông tin thêm ở đây msdn.microsoft.com/de-de/l Library / . Chỉ vấp phải một vấn đề tương tự với việc sử dụng mã hóa cứng \ n không cho tôi một dòng mới trong các cửa sổ ..
Andreas Reiff

3

Dựa trên câu trả lời của bạn cho những người khác, một cái gì đó như thế này là thứ bạn đang tìm kiếm.

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

Đầu ra


2
Mặc dù mã này có thể trả lời câu hỏi, cung cấp ngữ cảnh bổ sung về lý do và / hoặc cách mã này trả lời câu hỏi cải thiện giá trị lâu dài của nó.
Thomas Flinkow

0

Bạn cũng có thể sử dụng string[] something = text.Split('@'). Đảm bảo bạn sử dụng các dấu ngoặc đơn để bao quanh "@" để lưu nó dưới dạng một charloại. Điều này sẽ lưu trữ các ký tự lên đến và bao gồm mỗi "@" dưới dạng các từ riêng lẻ trong mảng. Sau đó, bạn có thể xuất từng ( element + System.Environment.NewLine) bằng vòng lặp for hoặc ghi nó vào tệp văn bản bằng cách sử dụng System.IO.File.WriteAllLines([file path + name and extension], [array name]). Nếu tệp được chỉ định không tồn tại ở vị trí đó, nó sẽ được tạo tự động.


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

1
Chào mừng đến với cộng đồng SO. Cảm ơn bạn đã trả lời câu hỏi. Tuy nhiên, đó là một thực hành tốt để thêm một số giải thích về lý do tại sao điều này hoạt động.
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);
    }
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.