문자열 C #에서 줄 바꿈 바꾸기


512

C #의 문자열 내에서 줄 바꿈을 어떻게 바꿀 수 있습니까?


2
더 알려주세요 : "줄 바꿈"이란 무엇입니까? 그것들을 무엇으로 바꾸고 싶습니까?
Jay Bazuzi

ha ha. System.getProperty ( "line.separator")가 C #의 대응자를 알고 싶어한다는 것을 알았을 때 Java에서 동일한 내용을 확인하고있었습니다. 당신의 게시물이 나를 도왔습니다.
라비 샤

답변:


715

다음으로 교체 사용 Environment.NewLine

myString = myString.Replace(System.Environment.NewLine, "replacement text"); //add a line terminating ;

다른 게시물에서 언급했듯이 문자열이 다른 환경 (OS)에서 온 경우 줄 바꾸기 문자 의 특정 환경 구현을 대체해야합니다 .


8
먼저 그것은 나를 위해 작동하지 않았다. 몇 가지 연구 끝에 해결책을 찾았습니다. 'using System; 또는 'System.Environment.NewLine'
Smolla

12
개행 문자를 모두 제거하지 않았습니다. 이 문자열을 사용해보십시오 "\ n \ r \ n 내 메시지 \ r \ n \ n \ r \ n는 이것입니다. \ n \ n \ r \ n"
Shakti Prakash Singh

13
일반적으로이 솔루션이 마음에 듭니다. 그러나 동일한 OS에서도 실제 줄 바꿈이 일치하지 않을 수 있습니다. 이것이 처리가 SQL을 리턴 한 이유입니다. 새 줄은 \ n이고 Environment.NewLine은 \ r \ n입니다. 결과는 일치하는 것이 없으므로 새 줄이 남았습니다.
Dono

@Dono> SQL 데이터는 어디에서 왔습니까? 아마도 유닉스 방식으로 새로운 라인을 다루는 외부 소스에서 나온 것 같습니다. OS
Laurent S.

이것은 String 클래스의 정적 메소드 중 하나 여야합니다. .NET 자체는 문자열에서 소스 줄 바꿈 형식을 감지하여 Environment.NewLine \ r \ n 형식으로 변환 할 수 있어야합니다.
Dean Kuga

442

지금까지 게시 된 솔루션은 Environment.NewLine 거나 string.Replace여러 번 호출하여 교체 문자열에 줄 바꿈이 포함되어 있으면 실패합니다 .

다음은 정규 표현식을 사용하여 세 번의 교체를 모두 한 번에 문자열로 전달하는 솔루션입니다. 이는 교체 문자열에 줄 바꿈이 안전하게 포함될 수 있음을 의미합니다.

string result = Regex.Replace(input, @"\r\n?|\n", replacementString);

3
그래서 Regex.Replace (input, @ "[\ r \ n] +", replacementString)을 수행해도 같은 작업을 수행하지 못합니까?
flamebaud 2016 년

7
@flamebaud 아니요, 행에 여러 줄 바꿈이 있으면 다른 결과가 생성됩니다. "\ r \ n? | \ n"은 각 줄 바꿈을 바꾸는 반면 "[\ r \ n] +"는 줄 바꿈을 여러 번 바꿉니다.
David Hammond

여러 줄 바꿈이 걱정되는 사용자 : / (\ r \ n? | \ n) / gm
BobbyA

4
다른 OS에서 오는 문자열에서 줄 바꿈을 제거하려는 경우 실제로 올바른 솔루션입니다. 좋은 예는 JSON 형식입니다. +1
Bastien Vandamme

1
축약어 문자열 (@ 접두어)을 사용하지 않으면 사용되는 모든 위치에 두 개의 백 슬래시가 있어야하므로 위의 @mark_byers의 대답은 여전히 ​​옳습니다. @ 접두사는 백 슬래시가 문자열의 일부이므로 Regex가 이스케이프 문자로 사용해야합니다.
Kirk Liemohn

173

The.Anyi.9의 답변을 확장하려면 일반적으로 사용 되는 다른 유형의 줄 바꿈 도 알고 있어야 합니다 . 파일의 출처에 따라 모든 대안을 찾아야 할 수도 있습니다 ...

string replaceWith = "";
string removedBreaks = Line.Replace("\r\n", replaceWith).Replace("\n", replaceWith).Replace("\r", replaceWith);

당신이 갈 것입니다 ...


6
먼저 환경을 더 좋아했지만 String이 시스템에서 실행되지 않으면 작동하지 않습니다. +1
Flo

1
하지 Line.Replace("\n", replaceWith).Replace("\r", replaceWith);충분?
Thomas Ayoub

5
아니요, \r\n교체 문자열이 두 번 나오게 되므로 이상적이지 않습니다.
좀비

1
문자열 리터럴이 필요하지 않습니까? string removedBreaks = Line.Replace (@ "\ r \ n", replaceWith) .Replace (@ "\ n", replaceWith) .Replace (@ "\ r", replaceWith);
Shawn Dotey

2
@ShawnDotey는 필요하지 않습니다. 백 슬래시와 문자 시퀀스가 ​​아닌 제어 문자를 바꾸고 싶습니다.
N. Kudryavtsev

38

문자열에 줄 바꿈을 삽입하고 싶지만 문자열에서 줄 바꿈을 모두 제거하지 않으려는 경우 Environment.Newline을 사용합니다.

플랫폼에 따라 다른 유형의 개행을 가질 수 있지만 동일한 플랫폼 내에서도 종종 다른 유형의 개행이 사용됩니다. 특히 파일 형식과 프로토콜을 다룰 때.

string ReplaceNewlines(string blockOfText, string replaceWith)
{
    return blockOfText.Replace("\r\n", replaceWith).Replace("\n", replaceWith).Replace("\r", replaceWith);
}

이것은 검색 된 웹 페이지 코드를 한 줄로 축소하고 싶을 때 유일한 방법입니다 (정규식 패턴을 더 쉽게 만들기 위해).
Paw Baltzersen

Brian R. Bondy에 전적으로 동의합니다. Corin이 제공하고 너무 많이 찬성 한 솔루션은 최소한 매우 순진합니다.
Califf

18

코드가 다른 환경에서 실행되어야하는 경우 Environment.NewLine상수 newline는 특정 환경에서 사용 되기 때문에 상수를 사용하는 것이 좋습니다.

line = line.Replace(Environment.NewLine, "newLineReplacement");

그러나 다른 시스템에서 생성 된 파일에서 텍스트를 가져 오면 정답이 아닐 수 있으므로 다른 시스템에서 사용되는 줄 바꿈 상수로 바꾸어야합니다. 일반적으로 \n또는 \r\n입니다.


대체가 발생하지 않으므로 원래 변수에 다시 할당해야합니다.
tvanfosson 2016 년

@driss 파일이 어떤 시스템에서 왔는지 전혀 모를 때 어떻게 새로운 줄 상수를 선택하는지 알고 싶습니다 ...이 솔루션은 실제로 UNIVERSAL 인 것 같습니다.
Califf

14

replace는 문자열에서 교체를 수행하지 않지만 문자가 교체 된 새 문자열을 반환한다는 것을 잊지 마십시오. 다음은 줄 바꿈을 제거합니다 (바꾸지 않음). @Brian R. Bondy의 방법을 확장 방법으로 싸서 다른 것으로 대체하는 경우 사용합니다. Replace 또는 제공된 확장 메서드를 호출하기 전에 먼저 null 값을 확인해야합니다.

string line = ...

line = line.Replace( "\r", "").Replace( "\n", "" );

확장 방법으로 :

public static class StringExtensions
{
   public static string RemoveLineBreaks( this string lines )
   {
      return lines.Replace( "\r", "").Replace( "\n", "" );
   }

   public static string ReplaceLineBreaks( this string lines, string replacement )
   {
      return lines.Replace( "\r\n", replacement )
                  .Replace( "\r", replacement )
                  .Replace( "\n", replacement );
   }
}

''C # 에는 가질 수 없습니다 -빈 문자와 같은 것은 없습니다. 것 '\0'대신에 일을?
Shevek

1
@ Shevek-잘못된 따옴표를 사용했습니다. 내가 대답 한 날에 상당한 양의 자바 스크립트를하고 있었을 것입니다.
tvanfosson 2016 년

@ Califf-동일하지는 않습니다.
tvanfosson

2
당신이 여기서 저지른 실수는 그것이 더 낫다는 것을 증명합니다. 내가 일한 대부분의 회사는 코딩 표준을 가지고 있습니다-HARDCODED LITERALS를 사용하지 마십시오.
Califf

2
@Califf 내가 만든 "실수"는 Intellisense와 함께 IDE에서 만들어지지 않았거나 컴파일되지 않았을 것입니다. 기분 string.Empty이 나아 졌다면 꼭 사용하십시오.
tvanfosson 2013

10

가능한 모든 줄 바꿈 방법 (Windows, Mac 및 Unix)을 바꾸려면 다음을 사용해야합니다.

string.Replace("\r\n", "\n").Replace('\r', '\n').Replace('\n', 'replacement');

이 순서대로 줄 끝 문자 조합을 찾을 때 줄 바꿈을 추가하지 않기 위해.


8

새 줄을 "정리"하려면 정규식을 사용하는 flamebaud 주석 @"[\r\n]+"이 최선의 선택입니다.

using System;
using System.Text.RegularExpressions;

class MainClass {
  public static void Main (string[] args) {
    string str = "AAA\r\nBBB\r\n\r\n\r\nCCC\r\r\rDDD\n\n\nEEE";

    Console.WriteLine (str.Replace(System.Environment.NewLine, "-"));
    /* Result:
    AAA
    -BBB
    -
    -
    -CCC


    DDD---EEE
    */
    Console.WriteLine (Regex.Replace(str, @"\r\n?|\n", "-"));
    // Result:
    // AAA-BBB---CCC---DDD---EEE

    Console.WriteLine (Regex.Replace(str, @"[\r\n]+", "-"));
    // Result:
    // AAA-BBB-CCC-DDD-EEE
  }
}

대부분의 경우 새 줄을 바꾸는 가장 좋은 방법입니다.
Shahbaz Ahmad

이 유용한 샘플 코드에 감사드립니다. 이 sytnax를 통해 수정되었습니다 : Regex.Replace (str, @ "[\ r \ n] +", "-")
Sedat Kumcu

6

나는 대체하는 데 필요한 \r\n실제 캐리지 리턴과 라인 피드와 교체 \t실제 탭. 그래서 나는 다음을 생각해 냈습니다.

public string Transform(string data)
{
    string result = data;
    char cr = (char)13;
    char lf = (char)10;
    char tab = (char)9;

    result = result.Replace("\\r", cr.ToString());
    result = result.Replace("\\n", lf.ToString());
    result = result.Replace("\\t", tab.ToString());

    return result;
}

6

왜 모두?

string ReplacementString = "";

Regex.Replace(strin.Replace(System.Environment.NewLine, ReplacementString), @"(\r\n?|\n)", ReplacementString);

참고 : 교체 strin하여 입력 문자열의 이름으로.



2

.Replace () 메소드를 사용하십시오.

Line.Replace("\n", "whatever you want to replace with");

2

줄 바꿈을 안전하게 대체하는 가장 좋은 방법은

yourString.Replace("\r\n","\n") //handling windows linebreaks
.Replace("\r","\n")             //handling mac linebreaks

줄 바꿈으로 \ n 만 (예 : 줄 바꿈) 문자열을 생성해야합니다. 이 코드는 혼합 줄 바꿈을 수정하는 데 유용합니다.


2

새로운 라인으로로 구분 될 수있다 \n, \r\r\n우선 교체거야 \r\r\n함께\n 데이터 문자열 만 나눕니다.

다음 줄은 parseCSV메소드 로 이동해야합니다 .

function parseCSV(data) {
    //alert(data);
    //replace UNIX new lines
    data = data.replace(/\r\n/g, "\n");
    //replace MAC new lines
    data = data.replace(/\r/g, "\n");
    //split into rows
    var rows = data.split("\n");
}

0
string s = Regex.Replace(source_string, "\n", "\r\n");

또는

string s = Regex.Replace(source_string, "\r\n", "\n");

당신이 가고 싶은 방법에 따라.

도움이되기를 바랍니다.


0

또 다른 옵션은 StringReader해당 문자열을 초과하는 것입니다. 리더 .ReadLine()에서 루프를 수행하십시오. 그런 다음 구분 기호가 무엇이든 (일관 적이거나 일관되지 않은) 구분선이 있습니다. 이를 통해 원하는대로 진행할 수 있습니다. 하나의 가능성은 StringBuilder전화 를 사용하는 것입니다.AppendLine 하는 것입니다.

장점은 "줄 바꿈"을 구성하는 프레임 워크를 프레임 워크에서 결정하도록하는 것입니다.


0

줄 바꿈 만 바꾸려면 :

var input = @"sdfhlu \r\n sdkuidfs\r\ndfgdgfd";
var match = @"[\\ ]+";
var replaceWith = " ";
Console.WriteLine("input: " + input);
var x = Regex.Replace(input.Replace(@"\n", replaceWith).Replace(@"\r", replaceWith), match, replaceWith);
Console.WriteLine("output: " + x);

줄 바꿈, 탭 및 공백을 바꾸려면 다음을 수행하십시오.

var input = @"sdfhlusdkuidfs\r\ndfgdgfd";
var match = @"[\\s]+";
var replaceWith = "";
Console.WriteLine("input: " + input);
var x = Regex.Replace(input, match, replaceWith);
Console.WriteLine("output: " + x);
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.