Dodawanie nowego wiersza do ciągu w C #


230

Mam sznurek.

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

Potrzebuję dodać nowy wiersz po każdym wystąpieniu symbolu „@” w ciągu.

Mój wynik powinien być taki

fkdfdsfdflkdkfk@
dfsdfjk72388389@
kdkfkdfkkl@
jkdjkfjd@
jjjk@

2
co rozumiesz przez „nowa linia nie działa w pliku tekstowym”? Jak piszesz do pliku tekstowego?
Mark Cidade

5
Opublikuj kod użyty do wypisania pliku. \ r \ n (Windows - Environment.Newline) lub \ n (Unix) powinien działać ...
Gishu

Odpowiedzi:


482

Używaj, Environment.NewLinekiedy chcesz w dowolnym ciągu. Przykład:

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

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

1
Ale muszę zapisać te informacje w pliku tekstowym takim jak ten fkdfdsfdflkdkfk @ dfsdfjk72388389 @ kdkfkdfkkl @ jkdjkfjd @ jjjk @ Znak nowej linii nie działa w pliku tekstowym.
balaweblog

Nie jest to dobre rozwiązanie, ponieważ System.String (alias string) jest niezmiennym obiektem, co oznacza, że ​​cały ciąg jest kopiowany. Lepiej używać obiektu System.Text.StringBuilder do operacji takich jak String.Replace.
ワ イ き ん ぐ

@Alexander Powiedziałbym, że nieefektywne operacje na łańcuchach to problem, którego nie musimy się już martwić w 2019 r.
Filipe Madureira,

2
@FilipeMadureira, który jest tak błędny na tak wiele sposobów. Ulepszenia sprzętowe czy nie, nigdy nie ma usprawiedliwienia dla celowego bycia złym programistą. Jeśli wiemy, jak to zrobić lepiej, powinniśmy. Poza tym wyobraź sobie, że implementujesz to w bibliotece, która jest używana jako podstawowa funkcja w systemie baz danych - chciałbyś mieć wysoką wydajność.
ワ イ き ん ぐ

@Alexander Bycie dobrym programistą to luksus, który mogą mieć tylko ludzie, którzy nie mają terminów / złej pracy / szefów, w przeciwnym razie zgodziłbym się z tobą. Na początku myślałem, że moje zdanie jest jasne.
Filipe Madureira,

70

Możesz dodać nowy znak wiersza po symbolu @ w następujący sposób:

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

Możesz także użyć NewLinewłaściwości w Environmentklasie (myślę, że jest to środowisko).


1
Ale muszę zapisać te informacje w pliku tekstowym takim jak ten fkdfdsfdflkdkfk @ dfsdfjk72388389 @ kdkfkdfkkl @ jkdjkfjd @ jjjk @ Znak nowej linii nie działa w pliku tekstowym.
balaweblog

18

Poprzednie odpowiedzi są bliskie, ale aby spełnić rzeczywiste wymaganie, aby @symbol pozostawał blisko, chciałbyś, aby tak było str.Replace("@", "@" + System.Environment.NewLine). To zatrzyma @symbol i doda odpowiedni znak (znaki) nowego wiersza dla bieżącej platformy.


9

Następnie zmodyfikuj poprzednie odpowiedzi, aby:

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

Jeśli nie chcesz, aby nowe wiersze w pliku tekstowym, nie zachowuj go.


6

Prosta zamiana ciągu wykona zadanie. Spójrz na przykładowy program poniżej:

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

jak powiedzieli inni, nowy wiersz char da ci nową linię w pliku tekstowym w systemie Windows. spróbuj wykonać następujące czynności:

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

Widziałem tylko twoje środowisko. Newline == \ r \ n = true teraz (może mi tego brakowało, ponieważ nie jest to składnia C #;)). Ponadto więcej informacji tutaj msdn.microsoft.com/de-de/library/… . Właśnie natknąłem się na podobny problem z używaniem na stałe \ n nie dającego mi nowej linii w Windowsie.
Andreas Reiff

3

W oparciu o odpowiedzi udzielone wszystkim innym, czegoś takiego szukasz.

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

Wynik


2
Chociaż ten kod może odpowiedzieć na pytanie, zapewnienie dodatkowego kontekstu dotyczącego tego, dlaczego i / lub jak ten kod odpowiada na pytanie, poprawia jego długoterminową wartość.
Thomas Flinkow

0

Możesz także użyć string[] something = text.Split('@'). Upewnij się, że używasz pojedynczych cudzysłowów, aby otoczyć „@” i zapisać go jako chartyp. Spowoduje to zapisanie znaków do każdego „@” włącznie z osobnymi słowami w tablicy. Następnie możesz element + System.Environment.NewLinewypisać każdy ( ) za pomocą pętli for lub zapisać go do pliku tekstowego za pomocą System.IO.File.WriteAllLines([file path + name and extension], [array name]). Jeśli określony plik nie istnieje w tej lokalizacji, zostanie automatycznie utworzony.


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

1
Witamy w społeczności SO. Dziękujemy za odpowiedź na pytanie. Dobrą praktyką jest jednak dodanie wyjaśnienia, dlaczego to działa.
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);
    }
}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.