একটি স্ট্রিং থেকে নতুন রেখার অক্ষরগুলি কীভাবে সরিয়ে নেওয়া যায়?


181

নিম্নলিখিত ফর্ম্যাটটিতে আমার একটি স্ট্রিং রয়েছে

string s = "This is a Test String.\n   This is a next line.\t This is a tab.\n'

আমি উপরের স্ট্রিং থেকে সমস্ত উপস্থিতি \nএবং মুছে ফেলতে চাই \r

আমি চেষ্টা করেছি string s = s.Trim(new char[] {'\n', '\r'});কিন্তু তাতে কোন লাভ হয়নি।

উত্তর:


321

আমি নিয়মিত ভাব প্রকাশ করতে পছন্দ করি। এই ক্ষেত্রে আপনি করতে পারেন:

string replacement = Regex.Replace(s, @"\t|\n|\r", "");

গতিশীল ভাষাগুলিতে যেমন নিয়মিত প্রকাশগুলি .NET বিশ্বে তত জনপ্রিয় নয় তবে তারা স্ট্রিংগুলি পরিচালনা করতে প্রচুর শক্তি সরবরাহ করে।


এটি অবশ্যই আমার জন্য সেরা সমাধান ছিল। এই সমস্যাটিকে সমাধান করার জন্য এই সি # এবং জাভাস্ক্রিপ্টের একটি মসৃণ মিশ্রণ আমার দরকার ছিল।
জো ব্রান্সচিয়ন

আমার একই ধরণের সমস্যা হয়েছিল যেখানে আমার স্ট্রিং থেকে নতুন লাইনগুলি সরাতে আমারও দরকার ছিল। আমি স্ট্রিং দিয়ে এটি করার চেষ্টা করেছি ep প্রতিস্থাপন, কাজ হয়নি। আমি যখন পরামিতি হিসাবে ঠিক একই নিয়মিত এক্সপ্রেশন স্ট্রিং সঙ্গে Regex.Replay ব্যবহার, এটি কাজ করে। ধন্যবাদ।
উদাহরণস্বরূপ

8
যদি 1M + আইটেমগুলিতে প্রক্রিয়া করে এমন লুপে এটি ব্যবহার করে থাকে তবে সাবধান হন। রেগেক্স কেবল স্ট্রিংয়ের চেয়েও ধীর গতিতে রয়েছে। প্রতিস্থাপন
নিক

কোড উদাহরণটি ট্যাবগুলিও সরিয়ে দেয়, যা প্রশ্নবিদ্ধ নয়।
মাইকেল ফ্রিজিম

71

আপনি String.Replaceএকটি অক্ষর অপসারণ করতে ব্যবহার করতে চান ।

s = s.Replace("\n", String.Empty);
s = s.Replace("\r", String.Empty);
s = s.Replace("\t", String.Empty);

মনে রাখবেন যে String.Trim(params char[] trimChars)কেবলমাত্র অনুরোধ করা ইভেন্টটি থেকে কেবল শীর্ষস্থানীয় এবং অনুসরণযোগ্য অক্ষরগুলি সরিয়ে দেয় trimChars

আপনি একটি এক্সটেনশন পদ্ধতি তৈরি করতে পারেন যা প্রচুর অস্থায়ী স্ট্রিং তৈরির উপরের পারফরম্যান্স সমস্যাগুলি এড়িয়ে চলে:

static string RemoveChars(this string s, params char[] removeChars) {
    Contract.Requires<ArgumentNullException>(s != null);
    Contract.Requires<ArgumentNullException>(removeChars != null);
    var sb = new StringBuilder(s.Length);
    foreach(char c in s) { 
        if(!removeChars.Contains(c)) {
            sb.Append(c);
        }
    }
    return sb.ToString();
}

8
নোট করুন যে এই পদ্ধতিটি দুটি মধ্যবর্তী স্ট্রিং অবজেক্ট তৈরি করবে। আপনার স্ট্রিংয়ের আকারের উপর নির্ভর করে এর উল্লেখযোগ্য পারফরম্যান্স এবং মেমরির ব্যবহারের পরিণতি হতে পারে।
সিডিউইভি

40

আমি জানি এটি একটি পুরানো পোস্ট, তবে আমি ভেবেছিলাম নতুন লাইন চরিত্রগুলি মুছে ফেলার জন্য আমি যে পদ্ধতিটি ব্যবহার করি তা ভাগ করব।

s.Replace(Environment.NewLine, "");

তথ্যসূত্র:

এমএসডিএন স্ট্রিং.পরিবর্তন পদ্ধতি এবং এমএসডিএন এনভায়রনমেন্ট e নিউলাইন সম্পত্তি


মনো সমর্থনের জন্য দুর্দান্ত
নিক

1
ক্রস-এনভায়রনমেন্টে (যেমন উইন্ডোজ অ্যাপ্লিকেশন যা ইউনিক্স সিস্টেমের ডেটা সহ ফিডযুক্ত) অ্যাপ্লিকেশনটিতে এটি লাভের চেয়ে বেশি সমস্যা সৃষ্টি করবে।
জাকুব সাজুয়াকিউইচিজ

15

গতি এবং কম স্মৃতির ব্যবহার যদি গুরুত্বপূর্ণ হয় তবে এর মতো কিছু করুন:

var sb = new StringBuilder(s.Length);

foreach (char i in s)
    if (i != '\n' && i != '\r' && i != '\t')
        sb.Append(i);

s = sb.ToString();

হ্যাঁ, আমি এটির সাথেও যাব (একটি এক্সটেনশন পদ্ধতিতে)। স্ট্রিংবিল্ডার ব্যবহার করা সর্বদা ভাল। +1
RPM1984

4
"স্ট্রিংবিল্ডার ব্যবহার করা সর্বদা ভাল" <আমি কোনও প্রো না, তবে এটি কঠোরভাবে সত্য নয়। জেফ অ্যাটউডের এই নিবন্ধটি স্ট্রিং ম্যানিপুলেশন / কনটেন্টেশন এবং শেষ পর্যন্ত অপ্টিমাইজেশনের একটি মজাদার অন্তর্দৃষ্টি সরবরাহ করে।
ফিল কুপার


3

একটি লিনকিউ পদ্ধতির:

string s = "This is a Test String.\n   This is a next line.\t This is a tab.\n'";

string s1 = String.Join("", s.Where(c => c != '\n' && c != '\r' && c != '\t'));

1
এটি এর জেনেরিক ওভারলোড ব্যবহার করছে যা ক্যোয়ারী দ্বারা প্রত্যাবর্তিত প্রতিটিকে string.Joinকল করবে । কেবলমাত্র ক্যোয়ারীর ফলাফলগুলি নির্মাণকারীর কাছে পৌঁছে দেওয়া ভাল । ToStringcharstrings1 = new string(s.Where(....).ToArrary());
জুহর

0

সঠিক পছন্দটি সত্যই নির্ভর করে যে ইনপুট স্ট্রিংটি কত বড় এবং পারফর্ম এবং মেমরির প্রয়োজনীয়তাগুলি কী তার উপর নির্ভর করে তবে আমি একটি নিয়মিত এক্সপ্রেশন ব্যবহার করি

string result = Regex.Replace(s, @"\r\n?|\n|\t", String.Empty);

বা যদি আমাদের একই প্রতিস্থাপন একাধিকবার প্রয়োগ করা প্রয়োজন হয় তবে রেজেক্সের মতো সংকলিত সংস্করণ ব্যবহার করা ভাল

var regex = new Regex(@"\r\n?|\n|\t", RegexOptions.Compiled); 
string result = regex.Replace(s, String.Empty);

দ্রষ্টব্য: ভিন্ন ভিন্ন পরিস্থিতিতে সেরা পারফরম্যান্স এবং সর্বনিম্ন মেমরির খরচ অর্জনের জন্য বিভিন্ন পদ্ধতির প্রয়োজন


0

ভাল ... আমি চাই আপনি আরও স্থানের নির্দিষ্ট ক্ষেত্রগুলি বুঝতে। \tআসলে অনুভূমিক স্থান হিসাবে নয়, অনুভূমিক স্থান হিসাবে সাজানো হয়। ( \tনোটপ্যাডে সন্নিবেশ পরীক্ষা করান)

আপনি যদি জাভা ব্যবহার করেন, কেবল ব্যবহার করুন \v। নীচে রেফারেন্স দেখুন।

\h - একটি অনুভূমিক সাদা স্থানের অক্ষর:

[\t\xA0\u1680\u180e\u2000-\u200a\u202f\u205f\u3000]

\v - একটি উল্লম্ব সাদা স্থানের অক্ষর:

[\n\x0B\f\r\x85\u2028\u2029]

তবে আমি সচেতন যে আপনি। নেট ব্যবহার করেন। সুতরাং প্রতিটি উল্লম্ব স্থান প্রতিস্থাপন আমার উত্তর হল ..

string replacement = Regex.Replace(s, @"[\n\u000B\u000C\r\u0085\u2028\u2029]", "");

এটি অন্য কোনও প্রশ্নের উত্তরের মতো দেখাচ্ছে ... এবং প্রকৃত উল্লেখটিও হারিয়েছে ...
আলেক্সি লেভেনকভ

-4

আপনি Trimশুরু এবং শেষ থেকে অপসারণ করতে চাইলে আপনি ব্যবহার করতে পারেন ।

string stringWithoutNewLine = "\n\nHello\n\n".Trim();

-6

অবগতির জন্য,

ট্রিম () এটি ইতিমধ্যে করে।

নিম্নলিখিত লিংকপ্যাড নমুনা:

void Main()
{
    var s = " \rsdsdsdsd\nsadasdasd\r\n ";
    s.Length.Dump();
    s.Trim().Length.Dump();
}

আউটপুট:

23
18

5
এটি মাঝের \ n কে সরিয়ে দেয় না।
ফ্ল্যাপিসকস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.