C # में स्ट्रिंग के न्यूलाइन को ट्रिम करने का सबसे आसान तरीका क्या है?


115

मैं यह सुनिश्चित करना चाहता हूं कि _content एक NewLine वर्ण के साथ समाप्त न हो:

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

लेकिन उपरोक्त कोड काम नहीं करता है क्योंकि ट्रिम को केवल वर्णों के संग्रह के लिए एक अतिभारित पैरामीटर नहीं लगता है।

एक एनवायरनमेंट को हटाने के लिए सबसे सरल वन-लाइनर क्या है। एक स्ट्रिंग के अंत से नई रेखा?


4
btw, तुम शायद TrimEnd चाहते
मार्क Gravell

जवाबों:


260

निम्नलिखित मेरे लिए काम करता है।

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

या

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

बहुत संक्षिप्त और \ r \ n मुद्दे से संबंधित है, अच्छा है
एडवर्ड टंगू

1
वर्णों के किसी भी संयोजन को ट्रिम करते समय एक नई लाइन चार (s) बनाते हैं जो अंतर्निहित समस्या और प्रश्न की भावना को संबोधित करता है, यह सामान्य अर्थों में अवांछित कार्यक्षमता के लिए एक संभावना भी छोड़ देता है। एक फाइल प्रोसेसिंग सेनारियो में मैं HeresALineForUnixToBeFedFromWindows \ n \ r \ n के एक स्ट्रिंग में पहला \ n अक्षुण्ण छोड़ने की आवश्यकता देख सकता था। जबकि अधिक क्रिया, जॉन स्कीट का उत्तर शायद सबसे अच्छा है और स्कॉट
विंस्टीन का रीडलाइन

26
TrimEnd () पहले से ही बिना किसी Parameters के Job कर रहा है! msdn.microsoft.com/de-de/library/… और msdn.microsoft.com/de-de/library/…
मार्कस

3
@ मर्कस धन्यवाद मुझे यह मिला क्योंकि मैं इस व्यवहार को नहीं चाहता हूं लेकिन यह अनुभव कर रहा था। मैं इंप्रेशन के तहत था \ n एक सफेद स्थान नहीं था, लेकिन यह है। और यह। और स्पष्ट रूप से सभी सफेद अंतरिक्ष वर्णों को स्पष्ट रूप से स्पष्ट करें
डेविड

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
संभवतः सबसे सटीक समाधान, लेकिन एक-लाइनर नहीं :-)
धमाकेदार

9

फ्रेमवर्क का उपयोग करें। ReadLine () विधि के पास कहने के लिए निम्नलिखित है:

एक पंक्ति को एक पंक्ति फ़ीड ("\ n"), एक गाड़ी वापसी ("\ r") या गाड़ी वापसी के तुरंत बाद एक पंक्ति फ़ीड ("\ r \ n") द्वारा वर्णों के अनुक्रम के रूप में परिभाषित किया गया है। जो स्ट्रिंग वापस किया जाता है, उसमें समाप्ति गाड़ी वापसी या लाइन फीड नहीं होती है।

तो निम्नलिखित चाल चलेंगे

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

1
सुरुचिपूर्ण हाँ, लेकिन इस पंक्ति को पढ़ने वाले अन्य लोगों के लिए समझना आसान नहीं है। एक व्याख्यात्मक टिप्पणी की जरूरत है (एक लाइनर बने रहने के लिए एक ही पंक्ति में)
गमू

1
नहीं करता है जब स्ट्रिंग में एक से अधिक लाइन होती है और आप केवल अंतिम खाली लाइन को निकालना चाहते हैं।
फ्लोरियन बर्जर

6

व्हाट अबाउट

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

यही कारण है कि ऐसा नहीं करता है काफी एक ही बात - यह ट्रिम जाएगा "abc \ n \ n \ n \ n \ n" उदाहरण के लिए, भले ही Environment.NewLine CRLF है
मार्क Gravell

1
इसे एक सुविधा के रूप में घोषित करें :-) मुझे समाधान पसंद है।
स्टीफन स्टाइनगर

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

यह निश्चित रूप से "\ r \ r \ r \ r" और साथ ही "\ n \ n \ n \ n" और अन्य संयोजनों को हटा देगा। और "वातावरण" में जहां न्यूलाइन "\ 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

जैसा कि मार्कस ने बताया कि ट्रिमएंड अब काम कर रहा है। मुझे विंडोज फोन 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 + "'");
    }

-2

मुझे पूरी पाठ की नई पंक्तियाँ निकालनी थीं। इसलिए मैंने इस्तेमाल किया:

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

1
यह एक आपदा होगी यदि पाठ में न्यूलाइन (ओं) को शामिल किया गया है जो अंत में नहीं है।
स्टीफन बर्गफेल्ट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.