itsource

C#에서 문자열의 새 줄을 잘라내는 가장 쉬운 방법은 무엇입니까?

mycopycode 2023. 9. 4. 19:47
반응형

C#에서 문자열의 새 줄을 잘라내는 가장 쉬운 방법은 무엇입니까?

_content가 NewLine 문자로 끝나지 않는지 확인합니다.

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

그러나 Trim은 문자열 집합에 대한 오버로드 매개 변수가 없고 문자만 있기 때문에 위 코드가 작동하지 않습니다.

Enivronment를 제거할 수 있는 가장 간단한 원라이너는 무엇입니까?문자열 끝에서 줄 바꿈?

다음은 저에게 도움이 됩니다.

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

또는

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

.Trim()제거\r\n저를 위해 (사용).NET 4.0).

어때요?

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

새로운 라인이 여러 개 있으면 다소 비효율적이지만, 효과가 있을 것입니다.

또는 트리밍이 괜찮다면 (say)"\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);
}

프레임워크를 사용합니다.ReadLine() 메서드에는 다음이 있습니다.

선은 일련의 문자 뒤에 선 피드("\n"), 캐리지 리턴("\r") 또는 캐리지 리턴("\r\n")이 뒤따르는 선 피드("\r\n")로 정의됩니다.반환되는 문자열에 종료 캐리지 반환 또는 라인 피드가 포함되어 있지 않습니다.

그래서 다음과 같은 것들이 그 속임수를 쓸 것입니다.

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

어때

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

이렇게 하면 당연히 "\r\r\r"뿐만 아니라 "\n\n\n" 및 기타 조합이 제거됩니다.그리고 NewLine이 "\n\r"이 아닌 "환경"에서 이상한 행동을 보일 수 있습니다 :-)

하지만 이것을 사용할 수 있다면 문자열 끝에 있는 줄 문자를 제거하는 가장 효과적인 방법이라고 생각합니다.

다음은 어떻습니까?

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

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

다소 답이 없지만 문자열의 새 줄을 잘라내는 가장 쉬운 방법은 처음부터 문자열에 새 줄이 표시되지 않도록 하는 것입니다.즉, 새 선을 제거하는 기본 함수를 사용합니다.많은 스트림 및 파일/io 메서드는 한 줄씩 출력을 요청하는 경우 새 줄을 포함하지 않습니다. 그러나 어떤 것을 줄로 묶어야 할 수도 있습니다.System.IO.BufferedStream.

같은 것들System.IO.File.ReadAllLines대신 사용할 수 있습니다.System.IO.File.ReadAllText대부분의 시간, 그리고ReadLine대신 사용할 수 있습니다.Read올바른 유형의 스트림으로 작업하는 경우(예:BufferedStream).

Markus가 지적했듯이 TrimEnd가 현재 작업을 수행하고 있습니다.Windows Phone 7.8 환경에서 문자열의 양쪽 끝에서 줄 피드와 공백을 가져와야 했습니다.좀 더 복잡한 다양한 옵션을 선택한 후 트림()만 사용하여 문제를 해결했습니다. 다음 테스트를 잘 통과했습니다.

   [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 + "'");
    }

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

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

언급URL : https://stackoverflow.com/questions/1038031/what-is-the-easiest-way-in-c-sharp-to-trim-a-newline-off-of-a-string

반응형