C #에서 문자열에서 줄 바꿈을 자르는 가장 쉬운 방법은 무엇입니까?


115

_content가 NewLine 문자로 끝나지 않는지 확인하고 싶습니다.

_content = sb.ToString().Trim(new char[] { Environment.NewLine });

그러나 Trim은 문자열 모음에 대해 오버로드 된 매개 변수가없는 것처럼 보이므로 위의 코드는 작동하지 않습니다 .

문자열 끝에서 Enivronment.Newline을 제거하는 가장 간단한 한 줄은 무엇입니까?


4
btw, 아마 TrimEnd
Marc Gravell을

답변:


260

다음은 나를 위해 작동합니다.

sb.ToString().TrimEnd( '\r', '\n' );

또는

sb.ToString().TrimEnd( Environment.NewLine.ToCharArray());

매우 간결하고 \ r \ n 문제를 다룹니다. nice
Edward Tanguay

1
줄 바꿈 문자를 구성하는 모든 문자 조합을 트리밍하면 근본적인 문제와 질문의 정신이 해결되지만 일반적인 의미에서 원하지 않는 기능이 발생할 가능성도 남습니다. 파일 처리 시나리오에서 HeresALineForUnixToBeFedFromWindows \ n \ r \ n 문자열에 첫 번째 \ n 그대로 두어야 할 필요성을 알 수있었습니다. 더 자세한 동안, 존 스키트의 대답은 아마 최고 스콧 와인 스타 인의에서는 ReadLine는 (더 많은 오버 헤드 어쩌면 조금이기는하지만) 또한 더 "정확한"입니다
b_levitt

26
TrimEnd ()는 이미 매개 변수없이 작업을 수행하고 있습니다! msdn.microsoft.com/de-de/library/…msdn.microsoft.com/de-de/library/…
Markus

3
@Markus 감사합니다.이 동작을 원하지 않지만 경험했기 때문에 이것을 발견했습니다. 나는 인상했다 \ n은 공백이 아니었다 그러나이며 .TrimEnd 및 .Trim 모두 취소 공백 기본적으로 문자
데이비드 캐리건

39

.Trim()\r\n나를 위해 제거합니다 (.NET 4.0 사용).


14

어때 :

public static string TrimNewLines(string text)
{
    while (text.EndsWith(Environment.NewLine))
    {
        text = text.Substring(0, text.Length - Environment.NewLine.Length);
    }
    return text;
}

여러 줄 바꿈이 있으면 다소 비효율적이지만 작동합니다.

또는, 당신이 (말) 트리밍 괜찮다면 "\r\r\r\r"또는 "\n\n\n\n"오히려보다는 다만 "\r\n\r\n\r\n":

// No need to create a new array each time
private static readonly char[] NewLineChars = Environment.NewLine.ToCharArray();

public static string TrimNewLines(string text)
{
    return text.TrimEnd(NewLineChars);
}

1
아마도 가장 정확한 솔루션이지만 한 줄짜리는 아닙니다 :-)
bang

9

프레임 워크를 사용하십시오. ReadLine () 메서드는 다음과 같이 말합니다.

줄은 줄 바꿈 ( "\ n"), 캐리지 리턴 ( "\ r") 또는 바로 뒤에 줄 바꿈 ( "\ r \ n")이 오는 캐리지 리턴이 뒤 따르는 일련의 문자로 정의됩니다. 반환되는 문자열에 종료 캐리지 리턴 또는 줄 바꿈이 포함되지 않습니다.

따라서 다음은 트릭을 수행합니다.

_content = new StringReader(sb.ToString()).ReadLine();

1
우아하지만이 줄을 읽는 다른 사람들에게는 이해하기 쉽지 않습니다. (한 - 라이너 : 남아 코스의 같은 라인에서)을 설명하는 주석을 필요
gumo

1
문자열에 두 줄 이상의 줄이 있고 마지막 빈 줄만 제거하려는 경우에는 수행하지 않습니다.
Florian Berger

6

이건 어떤가요

_content = sb.ToString().Trim(Environment.NewLine.ToCharArray());

그것은하지 않습니다 같은 일을 - 그것은 트림 것 "ABC \ n \ n을 \ n \ n \ n"예를 들어, Environment.NewLine가 CRLF 경우에도
마크 Gravell

1
기능으로 선언하십시오 :-) 솔루션이 마음에 듭니다.
Stefan Steinegger 2009-06-24

5
_content = sb.TrimEnd(Environment.NewLine.ToCharArray());

물론 "\ r \ r \ r \ r"과 "\ n \ n \ n \ n"및 기타 조합이 제거됩니다. 그리고 NewLine이 "\ n \ r"이 아닌 "환경"에서 이상한 동작이 발생할 수 있습니다. :-)

그러나 이것으로 살 수 있다면 이것이 문자열 끝에서 줄 바꿈 문자를 제거하는 가장 효과적인 방법이라고 믿습니다.


3

그냥 어때 :

string text = sb.ToString().TrimEnd(null)

그러면 문자열 끝에서 모든 공백 문자를 가져옵니다. 개행이 아닌 공백을 유지하려는 경우에만 문제가됩니다.


1

다소 답이 아니지만 문자열에서 줄 바꿈을 제거하는 가장 쉬운 방법은 줄 바꿈을 처음부터 자신의 코드에서 볼 수 없도록하는 것입니다. 즉, 개행을 제거하는 기본 함수를 사용합니다. 많은 스트림 및 파일 / io 메서드는 출력을 한 줄씩 요청하면 줄 바꿈을 포함하지 않지만 System.IO.BufferedStream.

상황이 좋아 System.IO.File.ReadAllLines대신 사용할 수 있습니다 System.IO.File.ReadAllText대부분의 시간, 그리고 ReadLine대신 사용할 수 있습니다 Read당신은 스트림 (예를 들어 오른쪽 종류로 작업하면 BufferedStream).


0

Markus가 지적했듯이 TrimEnd가 현재 작업을 수행하고 있습니다. Windows Phone 7.8 환경에서 문자열의 양쪽 끝에서 줄 바꿈과 공백을 가져와야했습니다. 다른 더 복잡한 옵션을 쫓은 후 Trim () 만 사용하여 문제가 해결되었습니다. 다음 테스트를 훌륭하게 통과했습니다.

   [TestMethod]
    [Description("TrimNewLines tests")]
    public void Test_TrimNewLines()
    {
        Test_TrimNewLines_runTest("\n\r     testi    \n\r", "testi");
        Test_TrimNewLines_runTest("\r     testi    \r", "testi");
        Test_TrimNewLines_runTest("\n     testi    \n", "testi");
        Test_TrimNewLines_runTest("\r\r\r\r\n\r     testi   \r\r\r\r \n\r", "testi");
        Test_TrimNewLines_runTest("\n\r  \n\n\n\n   testi äål.,    \n\r", "testi äål.,");
        Test_TrimNewLines_runTest("\n\n\n\n     testi  ja testi  \n\r\n\n\n\n", "testi  ja testi");
        Test_TrimNewLines_runTest("", "");
        Test_TrimNewLines_runTest("\n\r\n\n\r\n", "");
        Test_TrimNewLines_runTest("\n\r \n\n \n\n", "");
    }

    private static void Test_TrimNewLines_runTest(string _before, string _expected)
    {
        string _response = _before.Trim();
        Assert.IsTrue(_expected == _response, "string '" + _before + "' was translated to '" + _response + "' - should have been '" + _expected + "'");
    }

-2

텍스트 전체에서 새 줄을 제거해야했습니다. 그래서 다음을 사용했습니다.

            while (text.Contains(Environment.NewLine))
            {
                text = text.Substring(0, text.Length - Environment.NewLine.Length);
            }

1
텍스트에 끝이 아닌 NewLine (s)이 포함 된 경우 이는 재앙이 될 것입니다.
Stefan Bergfeldt
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.