C #에서 문자열에 줄 바꿈 추가


230

문자열이 있습니다.

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

문자열에 "@"기호가 나타날 때마다 줄 바꿈을 추가해야합니다.

내 결과는 다음과 같아야합니다

fkdfdsfdflkdkfk@
dfsdfjk72388389@
kdkfkdfkkl@
jkdjkfjd@
jjjk@

2
"개행은 텍스트 파일에서 유효하지 않습니다"는 무슨 뜻입니까? 텍스트 파일에 어떻게 쓰고 있습니까?
Mark Cidade

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
그러나이 정보를 다음과 같은 텍스트 파일로 작성해야합니다.
balaweblog

System.String (alias string)은 변경할 수없는 객체이므로 전체 문자열이 복사되고 있기 때문에 이것은 좋은 해결책이 아닙니다 . String.Replace와 같은 작업에 System.Text.StringBuilder 개체를 사용하는 것이 좋습니다.
ワ イ き ん ぐ

@Alexander 저는 문자열 연산이 비효율적이라고 말하면서 2019
Filipe Madureira

2
@FilipeMadureira는 여러 가지면에서 너무 잘못되었습니다. 하드웨어 개선 여부에 따라 의도적으로 나쁜 프로그래머가 된 것에 대한 변명이 결코 없습니다. 우리가 더 잘하는 법을 안다면 우리는해야합니다. 데이터베이스 시스템의 핵심 기능에 사용되는 라이브러리에서 이것을 구현하는 것 외에도 고성능을 원할 것입니다.
ワ イ き ん ぐ

@Alexander 좋은 프로그래머는 마감일 / 나쁜 직업 / 보스를 갖지 않은 사람들 만이 가질 수있는 사치입니다. 그렇지 않으면, 당신과 동의 할 것입니다. 나는 나의 요점이 처음에는 분명하다고 생각했다.
Filipe Madureira

70

다음과 같이 @ 기호 뒤에 줄 바꾸기 문자를 추가 할 수 있습니다.

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

클래스 에서 NewLine속성을 사용할 수도 있습니다 Environment(환경이라고 생각합니다).


1
그러나이 정보를 다음과 같은 텍스트 파일로 작성해야합니다.
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

다른 사람들이 말했듯이 개행 문자는 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
이 코드는 질문에 대답 할 수 있지만,이 코드가 질문에 응답하는 이유 및 / 또는 방법에 대한 추가 컨텍스트를 제공하면 장기적인 가치가 향상됩니다.
Thomas Flinkow

0

당신은 또한 사용할 수 있습니다 string[] something = text.Split('@'). 작은 따옴표를 사용하여 "@"을 묶어 char유형 으로 저장하십시오 . 이렇게하면 각 "@"까지의 문자를 배열에 개별 단어로 저장합니다. 그런 다음 element + System.Environment.NewLinefor 루프를 사용하여 각 ( ) 을 출력하거나을 사용하여 텍스트 파일에 쓸 수 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);
    }
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.