Додавання нового рядка до рядка в C #


230

У мене струна.

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

Мені потрібно додати новий рядок після кожного появи символу "@" у рядку.

Мій результат повинен бути таким

fkdfdsfdflkdkfk@
dfsdfjk72388389@
kdkfkdfkkl@
jkdjkfjd@
jjjk@

2
що ви маєте на увазі під новим рядком, який не діє в текстовому файлі? Як ви пишете в текстовий файл?
Марк Сідаде

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.
ワ イ き ん ぐ

@ Олександр Я б сказав, що неефективність строкових операцій - це проблема, про яку нам більше не потрібно хвилюватися у 2019 році.
Філіп Мадурейра

2
@FilipeMadureira, що так неправильно, так багато способів. Поліпшення обладнання чи ні, ніколи не є приводом, щоб навмисне бути поганим програмістом. Якщо ми знаємо, як це зробити краще, ми повинні. Крім того, уявіть, що реалізувати це в бібліотеці, яка використовується в основній функції в системі баз даних, ви хочете отримати високу продуктивність.
ワ イ き ん ぐ

@Alexander Бути хорошим програмістом - це розкіш, яку можуть мати лише люди, які не мають термінів / поганих робіт / начальників, інакше я погоджуся з вами. Я подумав, що спочатку я зрозумів.
Філіпе Мадурейра

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

як казали інші, новий рядок char дасть вам новий рядок у текстовому файлі у 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);
        }
    }
}

Бачив лише ваше середовище.newline == \ r \ n = вірно зараз (можливо, я пропустив це, оскільки це не синтаксис C #;)). Крім того , докладніше тут msdn.microsoft.com/de-de/library / ... . Просто натрапив на подібну проблему із використанням жорсткого кодування \ n, не даючи мені нового рядка у вікнах ..
Андреас Райф

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

Вихідні дані


2
Хоча цей код може відповісти на питання, надаючи додатковий контекст щодо того, чому та / або як цей код відповідає на питання, покращує його довгострокове значення.
Томас Флінков

0

Ви також можете використовувати string[] something = text.Split('@'). Переконайтеся, що ви використовуєте одиничні лапки, щоб оточити "@", щоб зберегти його як charтип. Це збереже символи до і включати кожен "@" як окремі слова в масиві. Потім ви можете вивести кожен ( element + System.Environment.NewLine) за допомогою циклу for або записати його в текстовий файл, використовуючи 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 Дякую за відповідь на запитання. Однак є хорошою практикою додати трохи пояснень, чому це працює.
фузі

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);
    }
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.