আমি রুবি স্ট্রিংয়ের মধ্য থেকে "\ n" স্ট্রিংটি কীভাবে সরিয়ে ফেলতে পারি?


115

আমার এই স্ট্রিং রয়েছে:

"some text\nandsomemore"

আমার এটি থেকে "\ n" মুছে ফেলতে হবে। আমি চেষ্টা করেছিলাম

"some text\nandsomemore".gsub('\n','')

কিন্তু এটি কাজ করে না। আমি এটা কিভাবে করব? পড়ার জন্য ধন্যবাদ.

উত্তর:


172

আপনার gsub এ ব্যবহার করা দরকার "\n"না '\n'। বিভিন্ন উদ্ধৃতি চিহ্নগুলি আলাদা আচরণ করে।

ডাবল উদ্ধৃতি "অক্ষর প্রসার এবং এক্সপ্রেশন ইন্টারপোলেশন অর্থাত্ অনুমতি দেয়। তারা আপনাকে পালিয়ে যাওয়া নিয়ন্ত্রণ চরগুলি \nতাদের প্রকৃত মানটিকে এই ক্ষেত্রে, নতুন লাইন উপস্থাপন করতে এবং তাদের ব্যবহারের অনুমতি দেয় #{expression}যাতে আপনি ভেরিয়েবলগুলি বুনতে পারেন এবং ভাল, আপনি পাঠ্যের মধ্যে কোনও রুবি এক্সপ্রেশন পছন্দ করতে পারেন।

অন্যদিকে, একক উদ্ধৃতিগুলি 'স্ট্রিংকে আক্ষরিক অর্থে আচরণ করে, তাই কোনও প্রসারণ, প্রতিস্থাপন, বিরক্তি বা আপনার কী নেই।

এই বিশেষ ক্ষেত্রে, এটা হয় ব্যবহার করতে ভালো .deleteবা .trমুছে ফেলতে স্ট্রিং পদ্ধতি নতুন লাইন

আরও তথ্যের জন্য এখানে দেখুন


17
যথাযথ বাক্য গঠন সত্যই হবে .gsub (/ \ n /, "")
বোল্ডার_রুবি

2
@ ডেভিড সঠিক। যাইহোক, আমি অনুভব করেছি যে উদ্ধৃতিগুলি একটি পার্থক্য দেখানো গুরুত্বপূর্ণ, যেহেতু এটি এই মুহুর্তে বেনের উপকার করবে। ডেভিড মনে মনে, এটি সম্ভবত "সঠিক" চেয়ে স্টাইলের বিষয় more ব্যক্তিগতভাবে আমি trএই কাজের জন্য একটি ভাল পছন্দ বলে মনে করি , তবে আমি যেমন বলেছি, আমি উত্তর দেওয়ার সময় একক, ডাবল উদ্ধৃতিগুলির পার্থক্যটি চিহ্নিত করা ভাল বলে মনে করি।
অক্টোডো

60

আপনি যখন কোনও স্ট্রিং সরিয়ে ফেলতে চান, পরিবর্তে পরিবর্তে আপনি String#delete(বা এর মিউটর সমতুল্য String#delete!) ব্যবহার করতে পারেন , যেমন:

x = "foo\nfoo"
x.delete!("\n")

x এখন "ফুফু" সমান

আপনি যখন স্ট্রিংটিকে কোনও কিছুর সাথে প্রতিস্থাপন করছেন না তার String#deleteচেয়ে এই নির্দিষ্ট ক্ষেত্রে বেশি পঠনযোগ্য gsub


3
রুবিতে কমপক্ষে 1.9.3 এ, deleteএখানে বর্ণিত হিসাবে ধ্বংসাত্মক নয়। এটি একটি নতুন স্ট্রিং প্রদান করে।
ব্রেন্ট ডিলিংহাম

ভাল বিক্ষোভ. মিউটর সংস্করণ স্ট্রিং # মুছা ব্যবহার করতে আমি সেই কোড স্নিপেট আপডেট করেছি! স্ট্রিংয়ের চেয়ে # মুছুন
পল লিডার

56

আপনি যদি চান বা আপনার স্ট্রিং থেকে সমস্ত শীর্ষস্থানীয় এবং অনুসরণযোগ্য শ্বেতস্পেস সরিয়ে ফেলতে আপত্তি করেন না আপনি stripপদ্ধতিটি ব্যবহার করতে পারেন ।

"    hello    ".strip   #=> "hello"   
"\tgoodbye\r\n".strip   #=> "goodbye"

এখানে উল্লিখিত হিসাবে ।

সম্পাদন করা এই প্রশ্নের জন্য মূল শিরোনাম ভিন্ন ছিল। আমার উত্তরটি মূল প্রশ্নের জন্য।


2
এটি প্রশ্নের উত্তর দেয় না। stripকেবল অগ্রণী এবং পেছনের শ্বেত স্থানটি
কোরিয়া

1
@ এমভিডানজ হ্যাঁ, এই নির্দিষ্ট প্রশ্নের বিবরণ দিলে এটি এর উত্তর দেয় না, তবে এটি শিরোনামের ভিত্তিতে প্রশ্নের উত্তর দেয়। আমি সন্দেহ করি এজন্যই লোকেরা এটি দরকারী বলে মনে করেছে।
থমাসডাব্লু

আমি যখন প্রাথমিকভাবে উত্তর দিয়েছিলাম তখন থেকেই শিরোনামটি পরিবর্তন করা হয়েছিল।
থমাস ডাব্লু

29

এর জন্য আপনার একটি রেজেেক্সের দরকার নেই। টিআর ব্যবহার করুন:

"some text\nandsomemore".tr("\n","")

টিআর এ প্রতিস্থাপনের মধ্যে পার্থক্য কী?
আর্নল্ড রোয়া

replaceকেবল পরিবর্তনশীল অ্যাসাইনমেন্টের মতো স্ট্রিংটিকে নতুন করে পরিবর্তন করে; যদিও trএকটি চরিত্র অনুসারে অক্ষর বৈশ্বিক সন্ধান এবং প্রতিস্থাপন।
মার্ক থমাস

19

রুবি থেকে ব্যবহার chompবা stripফাংশন:

"abcd\n".chomp => "abcd"
"abcd\n".strip => "abcd"

2
এটি প্রশ্নের উত্তর দেয় না। stripকেবল অগ্রণী এবং পেছনের শ্বেতস্পেস
ডোক.আর.অর্গ.ওকোর

2
chomp সেরা উপায় ... বিশ্বাস করতে পারি না এটি এত কম upvotes আছে
ব্যবহারকারী 1735921

chomp পদ্ধতিতে, exist n এবং \ r মধ্যবর্তী স্থানে উপস্থিত না থাকলে স্ট্রের শেষে থেকে সরানো হবে। সুতরাং এটি ওপি প্রশ্নটি সমাধান করে না
silva96

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