在C#中将换行符添加到字符串中


230

我有一个字符串。

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

我需要在字符串中每次出现“ @”符号后添加换行符。

我的输出应该是这样的

fkdfdsfdflkdkfk@
dfsdfjk72388389@
kdkfkdfkkl@
jkdjkfjd@
jjjk@

2
“换行在文本文件中无效”是什么意思?您如何写入文本文件?
马克·西达德

5
发布您用来写出文件的代码。\ r \ n(windows-Environment.Newline)或\ n(Unix)应该可以工作...
Gishu,

Answers:


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(alias string)是不可变的对象,这意味着整个字符串都将被复制。最好将System.Text.StringBuilder对象用于String.Replace之类的操作。
ワイきんぐ

@亚历山大,我想说字符串操作效率低是我们在2019
Filipe Madureira 19/12/4

2
@FilipeMadureira在很多方面都是错误的。不论是否进行硬件改进,刻意成为不良程序员永远不会成为借口。如果我们知道如何做得更好,我们应该。除了想象在数据库系统的核心功能中使用的库中实现此功能之外,您还需要高性能。
ワイきんぐ

@Alexander作为一名优秀的程序员,只有没有截止日期/糟糕的工作/老板的人才能拥有的奢侈品,否则,我会同意的。我以为一开始我的观点很明确。
菲利普·马杜雷拉

70

您可以在@符号后添加新的换行符,如下所示:

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

您也可以NewLineEnvironmentClass中使用该属性(我认为它是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/…。在一个类似的问题,使用硬编码\ n没有给我在窗口新行只是偶然..
安德烈亚斯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
欢迎来到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);
    }
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.