কোনও স্ট্রিংয়ের নতুন লাইনে ছাঁটাইয়ের সি # তে সহজতম উপায় কী?


115

আমি নিশ্চিত করতে চাই যে _ কন্টেন্টটি কোনও নিউলাইন চরিত্রের সাথে শেষ হবে না:

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

তবে উপরের কোডটি কাজ করে না, যেহেতু ট্রিমের মনে হচ্ছে কেবলমাত্র অক্ষরগুলির সংগ্রহের জন্য ওভারলোড প্যারামিটার নেই।

কোনও এনভ্রোনমেন্ট সরানোর জন্য সহজতম এক-লাইনার কী? স্ট্রিংয়ের শেষে থেকে নিউলাইন?


4
বিটিডব্লিউ, আপনি সম্ভবত ট্রিমেন্ড চান
মার্ক গ্র্যাভেল

উত্তর:


260

নিম্নলিখিত আমার জন্য কাজ করে।

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

অথবা

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

খুব সংক্ষিপ্ত এবং issue r \ n ইস্যু নিয়ে সুন্দর, সুন্দর
এডওয়ার্ড টাঙ্গুয়ে

1
একটি নতুন লাইন চর (গুলি) তৈরির যে কোনও অক্ষরের সংমিশ্রণটি অন্তর্নিহিত সমস্যা এবং প্রশ্নের স্পিরিটকে সম্বোধন করে, এটি সাধারণ অর্থেও অযাচিত কার্যকারিতার সম্ভাবনা ফেলে দেয়। একটি ফাইল প্রসেসিং সিনিয়ারোতে আমি প্রথম \ n অক্ষত রেখে যাওয়ার প্রয়োজন দেখতে পেতাম হেরেসালাইনফোর্ডউইনিক্সটোবিফিডফ্রুম উইন্ডোজের স্ট্রিংয়ে \ n of r \ n। আরও ভার্চুজের সময়, জন স্কিটির উত্তর সম্ভবত সেরা এবং স্কট ওয়েইনস্টাইনের রিডলাইন আরও "নির্ভুল" (যদিও কিছুটা ওভারহেডের
সাথেও হতে পারে

26
ট্রিমইন্ড () ইতিমধ্যে কোনও পরামিতি ছাড়াই কাজটি করছে! msdn.microsoft.com/de-de/library/… এবং এমএসডিএন.মিক
মার্কাস

3
@ মারকাস ধন্যবাদ আমি এটি খুঁজে পেয়েছি কারণ আমি এই আচরণটি চাই না তবে এটি অনুভব করছিলাম। আমি এই ছাপের মধ্যে ছিলাম white n কোনও সাদা জায়গা নয় তবে এটি এবং। ট্রিমইন্ড এবং .ট্রিম স্পেশাল স্পেস অক্ষর স্থানীয়ভাবে সাফ করুন
ডেভিড ক্যারিগান

39

.Trim()\r\nআমার জন্য অপসারণ (নেট নেট ব্যবহার করে)।


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

ফ্রেমওয়ার্ক ব্যবহার করুন। রিডলাইন () পদ্ধতিতে নিম্নলিখিতটি বলা আছে:

একটি লাইন একটি লাইন ফিড ("\ 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" কে ছাঁটাই করবে এমনকি এনভায়রনমেন্ট N নিউলাইন ক্রল্ফ থাকলেও
মার্ক

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

কিছুটা নন-উত্তর, তবে একটি স্ট্রিংয়ের নতুন লাইনের ছাঁটাইয়ের সহজতম উপায় হ'ল স্ট্রিংটিতে নতুন লাইনটি প্রথম স্থানে না রাখা, এটি নিশ্চিত করে যে এটি নিজের কোড দ্বারা কখনও দেখা যায় না making তা হল, দেশীয় ফাংশনগুলি ব্যবহার করে যা নিউলাইনটি সরিয়ে দেয়। অনেক স্ট্রিম এবং ফাইল / 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
পাঠ্যটিতে নিউলাইন (গুলি) রয়েছে যা শেষ নেই This
স্টিফান বার্গফেল্ড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.