একটি স্ট্রিং হলো ক্যারেক্টারদের একটি সিকোয়েন্স।
স্ট্রিং অবজেক্ট তাই তাদের অনেক মেথড আছে যা আপনি তাদের সাথে জিনিসগুলো করতে ব্যবহার করতে পারেন।
এই আর্টিকেলে আপনি উদাহরণসহ সবচেয়ে উপকারী রুবি স্ট্রিং মেথড গুলো আবিষ্কার করবেন!
স্ট্রিং দৈর্ঘ্য কীভাবে পাবেন
সহজ:
"ruby".size # 4
আপনি lengthও ব্যবহার করতে পারেন, size-র বদলে, তারা একই কাজ করে।
স্ট্রিং খালি কিনা চেক কীভাবে করবেন
আমরা একটি খালি স্ট্রিংকে শূন্য দৈর্ঘ্যের স্ট্রিং হিসেবে সংজ্ঞায়িত করি।
আপনি এভাবে চেক করতে পারেন:
"".size == 0 # true
অথবা আরও ভালো, empty? মেথড ব্যবহার করুন।
উদাহরণ:
"".empty? # true
একটি ব্লাঙ্ক স্ট্রিং হলো একটি স্ট্রিং যার দৈর্ঘ্য শূন্য, অথবা শুধু হোয়াইট স্পেস ক্যারেক্টারগুলো থেকে গঠিত।
স্ট্রিং ইন্টারপোলেশন কী?
স্ট্রিং ইন্টারপোলেশন আপনাকে স্ট্রিংগুলো একসাথে কম্বাইন করতে দেয়:
name = "Jesus"
puts "Hello #{name}"
যে কিছু লোক নাও জানেন সেটি হলো আপনি ইন্টারপোলেশনের ভেতরে আসল কোড রাখতে পারেন।
এখানে একটি উদাহরণ:
puts "The total is #{1+1}" # "the total is 2"
রুবি স্ট্রিং ইন্টারপোলেশন ব্লকে to_s মেথড কল করে, এটি অবজেক্টকে বলে দেয় নিজেকে স্ট্রিং-এ রূপান্তর করতে।
সাবস্ট্রিং কীভাবে এক্সট্রাক্ট করবেন
একটি সাবস্ট্রিং হলো একটি স্ট্রিং-এর ছোট অংশ, এটি উপকারী যদি আপনি শুধু সেই নির্দিষ্ট অংশটি চান, যেমন শুরু, মাঝপথ, বা শেষ।
রুবিতে সাবস্ট্রিং কীভাবে পাবেন?
একটি উপায় হলো একটি শুরুর ইনডেক্স এবং ক্যারেক্টার সংখ্যা ব্যবহার করা, স্কোয়ার ব্র্যাকেটের ভেতরে, কমা দিয়ে আলাদা করে।
এভাবে:
string = "abc123" string[0,3] # "abc" string[3,3] # "123"
প্রথম নাম্বারটি হলো শুরুর ইনডেক্স।
দ্বিতীয় নাম্বারটি হলো আপনি কত ক্যারেক্টার চান।
আপনি একটি রেঞ্জও ব্যবহার করতে পারেন যদি আপনি কিছু একইভাবে করতে চান "লাস্ট ক্যারেক্টার বাদে সব ক্যারেক্টার পাওয়া"।
উদাহরণ:
string = "abc123" string[0..-2] # "abc12"
এখন, প্রথম ইনডেক্সটি এখনও শুরুর ইনডেক্স, কিন্তু দ্বিতীয় ইনডেক্স হলো শেষ ইনডেক্স (ইনক্লুসিভ)। এই -2 হলো শেষ থেকে দ্বিতীয় ক্যারেক্টার, এবং -1 হলো স্ট্রিং-এর শেষ।
আপনি যদি সাবস্ট্রিং রিমুভ বা রিপ্লেস করতে চান।
আপনি এটি করতে পারেন:
string[0..2] = "" p string # "123"
খুব ভালো!
এক স্ট্রিং অন্য স্ট্রিং ধারণ করে কিনা জানার উপায়
সর্বোচ্চ সহজ উপায় কী একটি স্ট্রিং অন্য স্ট্রিং-এ অন্তর্ভুক্ত আছে কিনা জানার?
include? মেথড:
string = "Today is Saturday"
string.include?("Saturday") # true
আপনি index মেথডও ব্যবহার করতে পারেন:
string = "Today is Sunday"
string.index("day") # 2
এই মেথডটি আংশিক শব্দ খুঁজে এবং true/false রিটার্ন করার বদলে সেটি আপনাকে ইনডেক্স দেয় যেখানে এই স্ট্রিংটির শুরুটি পাওয়া গেছে।
এই উদাহরণে, index "Today"-তে "day" খুঁজে পাচ্ছে।
যদি আপনি প্যাটার্ন খুঁজতে চান (যেমন "day" শব্দ ধারণকারী সব শব্দ) তবে আপনি রেগুলার এক্সপ্রেশন খুঁজছেন।
রুবি স্ট্রিং প্যাড কীভাবে করবেন
এক স্ট্রিং প্যাড করার একটি উপায় হলো rjust মেথড দুটি আর্গুমেন্ট দিয়ে ব্যবহার করা:
binary_string = "1101" binary_string.rjust(8, "0") # "00001101"
আপনি যদি ডানে প্যাড করতে চান তবে ljust ব্যবহার করতে পারেন:
binary_string = "1111" binary_string.ljust(8, "0") # "11110000"
কেস ইগ্নোর করে স্ট্রিং তুলনা
কারণ স্ট্রিং তুলনা কেস-সেনসিটিভ তাই আপনি নিশ্চিত হতে চান আপনি যে দুটি স্ট্রিং তুলনা করছেন সেগুলো একই কেসে আছে।
সাধারণ উপায় হলো সমীকরণের দুপাশকে downcase বা upcase করা।
উদাহরণ:
lang1 = "ruby" lang2 = "Ruby" lang1.upcase == lang2.upcase
একটি casecmp? মেথডও আছে যা কেস-ইনসেনসিটিভ তুলনা করে, কিন্তু এটি খুব কম ব্যবহার হয়।
উপরের উদাহরণটিই ব্যবহার করুন।
স্ট্রিং ট্রিম করা এবং হোয়াইট স্পেস রিমুভ করা
ফাইল বা ওয়েবসাইট থেকে ডেটা পড়ার সময় আপনি আপনার স্ট্রিং-এ একস্ট্রা হোয়াইট স্পেস পেতে পারেন।
আপনি সেই একস্ট্রা স্পেস strip মেথড দিয়ে রিমুভ করতে পারেন:
extra_space = " test " extra_space.strip # "test"
আপনি যদি শুধু এক পাশ থেকে (বাম/ডান) হোয়াইট স্পেস রিমুভ করতে চান তবে lstrip এবং rstrip মেথডগুলো ব্যবহার করতে পারেন।
স্ট্রিং প্রিফিক্স এবং সাফিক্স
আপনি start_with? মেথড ব্যবহার করতে পারেন চেক করতে একটি স্ট্রিং নির্দিষ্ট প্রিফিক্স দিয়ে শুরু হয় কিনা।
এখানে একটি উদাহরণ:
string = "ruby programming" string.start_with? "ruby" # true
end_with? মেথডও আছে:
string = "ruby programming" string.end_with? "programming" # true
অতিরিক্তভাবে, রুবি ২.৫-এ delete_prefix এবং delete_suffix মেথডগুলো চালু করা হয়েছে, যা আপনার জন্য উপকারী হতে পারে।
এখানে একটি উদাহরণ:
string = "bacon is expensive"
string.delete_suffix(" is expensive") # "bacon"
স্ট্রিংকে ক্যারেক্টার অ্যারে-এ রূপান্তর
একটি স্ট্রিং নিয়ে এটিকে ক্যারেক্টারদের একটি অ্যারেতে ভাঙা সহজ split মেথড দিয়ে।
উদাহরণ:
string = "a b c d" string.split # ["a", "b", "c", "d"]
ডিফল্টভাবে split স্পেস ব্যবহার করে সেপারেটর ক্যারেক্টার হিসেবে, কিন্তু আপনি এই মেথডে একটি আর্গুমেন্ট পাস করে ভিন্ন সেপারেটর নির্দিষ্ট করতে পারেন।
এখানে কীভাবে আপনি কমা-সেপারেটেড ভ্যালু (CSV) স্প্লিট করতে পারেন:
csv = "a,b,c,d"
string.split(",") # ["a", "b", "c", "d"]
কিন্তু আপনি যদি CSV ডেটা নির্দিষ্টভাবে নিয়ে কাজ করেন তবে আপনি স্ট্যান্ডার্ড লাইব্রেরির CSV ক্লাস ব্যবহার করতে বিবেচনা করতে পারেন। এই ক্লাসটি কলাম হেডার পড়ার মতো কাজগুলো করতে পারে, তাই আপনার জন্য বিষয়টি সহজ করে দেবে।
অ্যারেকে স্ট্রিং-এ রূপান্তর
যদি আপনি স্ট্রিংদের একটি অ্যারে নেওয়া এবং সেগুলো একসাথে জয়েন করে একটি বড় স্ট্রিং বানাতে চান তবে আপনি join মেথড ব্যবহার করতে পারেন।
উদাহরণ:
arr = ['a', 'b', 'c'] arr.join # "abc"
join-এ আর্গুমেন্ট পাস করা সম্ভব, এই আর্গুমেন্টটি হলো ক্যারেক্টার সেপারেটর।
উদাহরণ:
arr = ['a', 'b', 'c']
arr.join("-") # "a-b-c"
স্ট্রিংকে ইন্টিজার-এ রূপান্তর
আপনি যদি "49" এর মতো একটি স্ট্রিংকে ইন্টিজার 49-এ রূপান্তর করতে চান তবে আপনি to_i মেথড ব্যবহার করতে পারেন।
উদাহরণ:
"49".to_i
লক্ষ্য করুন যদি আপনি কোনো সংখ্যা নেই এমন একটি স্ট্রিং দিয়ে এটি ট্রাই করেন তবে আপনি 0 পাবেন।
উদাহরণ:
"a".to_i # 0
স্ট্রিং কি একটি নম্বর কিনা চেক করা
আপনি কি জানতে চান একটি স্ট্রিং শুধু পূর্ণ সংখ্যা দিয়ে তৈরি কিনা?
আপনি এটি করতে পারেন:
"123".match?(/\A-?\d+\Z/) # true "123bb".match?(/\A-?\d+\Z/) # false
নোট:
match?মেথডটি রুবি ২.৪-এ চালু করা হয়েছে, পুরনো ভার্সনে আপনিmatchব্যবহার করতে পারেন (প্রশ্নচিহ্ন ছাড়া)।
এই কোডটি একটি রেগুলার এক্সপ্রেশন ব্যবহার করে, আমি আপনার জন্য অনুবাদ করছি:
"স্ট্রিং-এর শুরু থেকে (\A) চেক করুন একটি অপশনাল ড্যাশ আছে কিনা (-?, 네가টিভ নাম্বারের জন্য), তারপর নিশ্চিত করুন কিছু নাম্বার আছে (\d+) এবং স্ট্রিং-এর শেষ পর্যন্ত (\Z) কিছুই নেই।"
ক্যারেক্টার অ্যাপেন্ড করা
আপনি ছোট স্ট্রিংগুলো থেকে একটি বড় স্ট্রিং বানাতে পারেন ক্যারেক্টারগুলো একটি বিদ্যমান স্ট্রিং-এ অ্যাপেন্ড করে। এটিকে আমরা স্ট্রিং ক্যাটেনেশন-ও বলি।
এটি কীভাবে করবেন << মেথড ব্যবহার করে:
string = "" string << "hello" string << " " string << "there" # "hello there"
স্ট্রিং ক্যাটেনেশনের জন্য += ব্যবহার করবেন না কারণ এটি প্রতি বার একটি নতুন স্ট্রিং তৈরি করবে, যা পারফরম্যান্সের জন্য ভালো নয়!
রুবিতে স্ট্রিং-এর ক্যারেক্টারগুলো ওভের ইটারেট করা
কখনো কখনো একটি স্ট্রিং-এর ইন্ডিভিজুয়াল ক্যারেক্টার নিয়ে কাজ করা উপকারী হয়।
এটি করার একটি উপায় হলো each_char মেথড ব্যবহার করা:
"rubyguides".each_char { |ch| puts ch }
আপনি chars মেথডও ব্যবহার করতে পারেন স্ট্রিংকে ক্যারেক্টারদের একটি অ্যারেতে রূপান্তর করতে। তারপর আপনি এই অ্যারেতে each ব্যবহার করতে পারেন ইটারেট করতে।
উদাহরণ:
array_of_characters = "rubyguides".chars # ["r", "u", "b", "y", "g", "u", "i", "d", "e", "s"]
রুবিতে স্ট্রিংকে আপারকেস বা লোয়ারকেস-এ রূপান্তর
আপনি যদি একটি স্ট্রিংকে সকল আপারকেস-এ রূপান্তর করতে চান তবে upcase মেথড ব্যবহার করতে পারেন।
উদাহরণ:
"abcd".upcase # "ABCD"
এবং আপনি যদি লোয়ারকেস-এ রূপান্তর করতে চান তবে downcase মেথড ব্যবহার করতে পারেন।
উদাহরণ:
"ABCD".downcase # "abcd"
মাল্টিলাইন স্ট্রিং তৈরি করা
আপনি দুটি ভিন্নভাবে মাল্টিলাইন স্ট্রিং তৈরি করতে পারেন।
একটি হলো হেরডক্স ব্যবহার করে:
b = <<-STRING aaa bbb ccc STRING
আরেকটি হলো %Q ব্যবহার করে:
a = %Q(aaa bbb ccc )
Gsub মেথড ব্যবহার করে স্ট্রিং-এর ভেতরে টেক্সট রিপ্লেস করা
আপনি যদি একটি স্ট্রিং-এর ভেতরে টেক্সট রিপ্লেস করতে চান তবে gsub মেথড ব্যবহার করুন।
"dogs" শব্দটি "cats"- দিয়ে রিপ্লেস করা যাক:
string = "We have many dogs"
string.gsub("dogs", "cats") # "We have many cats"
আপনি যদি স্ট্রিংটি রিমুভ করতে চান তবে ২য় আর্গুমেন্ট হিসেবে খালি স্ট্রিং ব্যবহার করুন।
উদাহরণ:
string = "abccc"
string.gsub("c", "") # "ab"
এখন:
gsub মেথড একটি নতুন স্ট্রিং রিটার্ন করে।
আপনি যদি মূল স্ট্রিং-এ পরিবর্তনগুলো প্রয়োগ করতে চান তবে gsub! মেথড ব্যবহার করতে পারেন।
gsub মেথড রেগুলার এক্সপ্রেশনও আর্গুমেন্ট হিসেবে নেয় যাতে আপনি এক্সাক্ট শব্দের বদলে প্যাটার্ন রিপ্লেস করতে পারেন।
এখানে একটি উদাহরণ:
string = "We have 3 cats" string.gsub(/\d+/, "5") # "We have 5 cats"
এটি স্ট্রিং-এ সকল নাম্বার (\d+) কে নাম্বার 5-দিয়ে রিপ্লেস করে।
এই মেথড ব্যবহার করার আরেকটি উপায়, ব্লক দিয়ে:
title = "the lord of the rings"
title.gsub(/\w+/) { |word| word.capitalize } # "The Lord Of The Rings"
gsub বনাম sub কী?
তবে, sub একই gsub-এর মতো, কিন্তু এটি শুধু প্রথম ম্যাচটি রিপ্লেস করে।
Gsub সকল ম্যাচ রিপ্লেস করে।
স্ট্রিং থেকে লাস্ট ক্যারেক্টার রিমুভ করা
আপনি যদি ইউজার থেকে কিছু ইনপুট নেন (Kernel#gets মেথড ব্যবহার করে) তবে আপনার স্ট্রিং-এর শেষে একটি নিউলাইন ক্যারেক্টার (\n) থাকবে, যা আপনাকে সরাসরি স্ট্রিং তুলনা করতে দেয় না।
উদাহরণ:
puts "What's your name?" name = gets # কিছু টাইপ করুন...
সেই একস্ট্রা নিউলাইন ক্যারেক্টার (\n) রিমুভ করার সেরা উপায় হলো chomp মেথড ব্যবহার করা।
উদাহরণ:
name = gets.chomp
রুবি ২.৩ থেকে chomp মেথড একটি অপশনাল আর্গুমেন্ট নেয় যা আপনাকে আপনার পছন্দের ক্যারেক্টার রিমুভ করতে দেয়।
উদাহরণ:
"abcd?".chomp("?") # "abcd"
এবং যদি ক্যারেক্টারটি वहाँ না থাকে তবে এটি মূল স্ট্রিং ফেরত দেবে।
স্ট্রিং এনকোডিং পরিবর্তন করা
স্ট্রিংগুলো বাইটের একটি সিকোয়েন্স হিসেবে সংরক্ষিত হয়, সেগুলো তাদের এনকোডিংয়ের ভিত্তিতে ক্যারেক্টারে রূপান্তরিত হয় যা আপনি দেখতে পান।
উদাহরণস্বরূপ, ASCII এনকোডিং-এ নাম্বার ৬৫ রিপ্রেজেন্ট করে "A" লেটার।
কিন্তু আরও জটিল এনকোডিংও আছে, যেমন UTF-8, যা আপনাকে ভিন্ন ভাষার ক্যারেক্টার (চাইনিজ, ইত্যাদি) এবং এমনকি ইমোজি রিপ্রেজেন্ট করতে দেয়।
একটি স্ট্রিং-এর বর্তমান এনকোডিং জানতে আপনি encoding মেথড ব্যবহার করতে পারেন।
"abc".encoding # Encoding:UTF-8
ডিস্ক থেকে ফাইল পড়ার সময় বা ওয়েবসাইট থেকে ডেটা ডাউনলোড করার সময় আপনি এনকোডিং সমস্যায় পড়তে পারেন।
আপনি প্রায়শই সেটি encoding এনফোর্স করে ঠিক করতে পারেন।
এভাবে:
"abc".force_encoding("UTF-8")
ক্যারেক্টার কাউন্ট করা
আপনি একটি স্ট্রিং-এ একটি ক্যারেক্টার কতবার আসেছে সেটি count মেথড ব্যবহার করে জানতে পারেন।
উদাহরণ:
str = "aaab"
str.count("a") # 3
str.count("b") # 1
সারসংক্ষেপ
আপনি অনেক স্ট্রিং মেথড সম্পর্কে শিখতে পেরেছেন, যেমন join এবং split স্ট্রিংকে অ্যারেতে ভাঙতে, gsub স্ট্রিং-এর ভেতরে টেক্সট রিপ্লেস করতে এবং strip একস্ট্রা হোয়াইট স্পেস ট্রিম করতে।
যেহেতু আপনি পরবর্তীতে এই পেজটি রেফারেন্স করতে চাইতে পারেন নিশ্চিত করুন এটি বুকমার্ক করুন এবং আপনার সব রুবি বন্ধুদের সাথে শেয়ার করুন 🙂
পড়ার জন্য ধন্যবাদ!