Добавление новой строки в строку в C #


230

У меня есть строка.

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

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

Мой вывод должен быть таким

fkdfdsfdflkdkfk@
dfsdfjk72388389@
kdkfkdfkkl@
jkdjkfjd@
jjjk@

2
что вы подразумеваете под "новая строка не эффективна в текстовом файле"? Как вы пишете в текстовый файл?
Марк Сидаде

5
Разместите код, который вы используете для записи файла. \ r \ n (windows - Environment.Newline) или \ n (Unix) должны работать ...
Гишу

Ответы:


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, это так неправильно во многих отношениях. Улучшения в оборудовании или нет, никогда не бывает оправдания для того, чтобы быть плохим программистом нарочно. Если мы знаем, как сделать это лучше, мы должны. Кроме того, представьте, что вы реализуете это в библиотеке, которая используется в качестве основной функции в системе баз данных - вам нужна высокая производительность.
ワ イ き ん ぐ

@ Александр быть хорошим программистом - это роскошь, которую могут иметь только люди, у которых нет крайних сроков / плохой работы / боссов, в противном случае я бы с тобой согласился. Сначала я думал, что моя точка зрения ясна.
Филипе Мадурейра

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

Только видел ваш environment.newline == \ r \ n = true сейчас (возможно, я пропустил это, потому что это не синтаксис 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 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
Добро пожаловать в Сообщество. Спасибо за ответ на вопрос. Однако, это хорошая практика, чтобы добавить некоторые объяснения, почему это работает.
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);
    }
}
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.