রুবি: স্ট্রিংয়ের প্রথম চরিত্রটি কীভাবে পাবেন


113

আমি রুবি ব্যবহার করে স্ট্রিংয়ের প্রথম অক্ষরটি কীভাবে পেতে পারি?

শেষ পর্যন্ত আমি যা করছি তা হ'ল কারও পদবি গ্রহণ করা এবং এটি থেকে একটি প্রাথমিক তৈরি করা।

সুতরাং যদি স্ট্রিংটি "স্মিথ" হত তবে আমি কেবল "এস" চাই।


10
পার্শ্ব নোট হিসাবে, আপনি যদি কারাগারে থাকেন তবে আপনি কেবলমাত্র করতে পারেন'Smith'.first
ওয়াকিং উইকি

রুবি ১.৯++"Smith".chr #=> "S"
টাইলার জেমস ইয়ং

উত্তর:


128

আপনার কোডটি আরও পঠনযোগ্য করে তুলতে আপনি রুবির উন্মুক্ত ক্লাস ব্যবহার করতে পারেন। উদাহরণস্বরূপ, এটি:

class String
  def initial
    self[0,1]
  end
end

আপনাকে initialকোনও স্ট্রিংয়ের পদ্ধতিটি ব্যবহার করতে দেয় । সুতরাং আপনার যদি নিম্নলিখিত ভেরিয়েবলগুলি থাকে:

last_name = "Smith"
first_name = "John"

তারপরে আপনি আদ্যক্ষরগুলি খুব পরিষ্কার এবং স্বচ্ছলভাবে পেতে পারেন:

puts first_name.initial   # prints J
puts last_name.initial    # prints S

এখানে উল্লিখিত অন্য পদ্ধতিটি রুবি ১.৮-তে কাজ করে না (তবে আপনাকে আর 1.8 ব্যবহার করা উচিত নয়! - তবে এই উত্তরটি পোস্ট করার পরেও এটি বেশ সাধারণ ছিল):

puts 'Smith'[0]           # prints 83

অবশ্যই, আপনি যদি এটি নিয়মিতভাবে না করে থাকেন তবে পদ্ধতিটি সংজ্ঞায়িত করা ওভারকিল হতে পারে এবং আপনি সরাসরি এটি করতে পারেন:

puts last_name[0,1] 

101

আপনি যদি রুবির (1.9.0 বা তার পরে) এর সাম্প্রতিক সংস্করণ ব্যবহার করেন তবে নিম্নলিখিতগুলির কাজ করা উচিত:

'Smith'[0] # => 'S'

আপনি যদি 1.9.0+ বা 1.8.7 ব্যবহার করেন তবে নিম্নলিখিতগুলির কাজ করা উচিত:

'Smith'.chars.first # => 'S'

আপনি যদি 1.8.7 এর বেশি পুরানো সংস্করণ ব্যবহার করেন তবে এটি কাজ করা উচিত:

'Smith'.split(//).first # => 'S'

লক্ষ্য করুন 'Smith'[0,1]নেই না 1.8 কাজ, এটা হবে না আপনি প্রথম অক্ষর এটি শুধুমাত্র আপনাকে প্রথমে দিতে হবে দিতে, বাইট


1
মনে রাখবেন যে এটি কেবল রুবি 19 তে কাজ করে। রুবি 18 এ "Smith"[0]'এস' অক্ষরের পূর্ণসংখ্যার মানটি ফিরিয়ে দেয়। উভয় সংস্করণ মান্য করে "Smith"[0,1] == "S"
রামপিন

@ ইম্পিয়ান: অবশ্যই, তবে এই প্রশ্নে কোনও ইঙ্গিত নেই যে ওপি সবচেয়ে সাম্প্রতিক সংস্করণ ব্যবহার করে না, তবে জটিল বিষয়গুলিকে কেন বিরক্ত করবেন?
Jörg ডব্লু মিট্টাগ

4
রুবি ১.৮ উত্তরাধিকার নয়! রুবি 1.8 লাইনটি এখনও সমর্থিত এবং সম্ভবত একটি 1.8.8 সংস্করণ প্রকাশিত হবে। তদুপরি, জেরুবি বা রুবিনিয়াস এখনও 1.9 সমর্থন করে না। আমি 5% বাজি ধরব যে আজ 1.9 এর তুলনায় 1.8 এর বেশি ব্যবহারকারী রয়েছে।
মার্ক-আন্দ্রে লাফোর্টুন

3
@ জার্গ: উত্তরটি "Smith"[0,1]1.8 (ASCII ধরে ধরে) নিয়ে কাজ করে। আপনি কেন অনুরোধকারী এবং সেই সাথে অন্য যে কেউ এই প্রশ্নটি থেকে শিখতে চান তাদের সম্পর্কে কেন এতটা ধারণা নিয়েছেন তা নিশ্চিত নয় Not উদাহরণস্বরূপ, ম্যাক ওএস এক্স রুবি 1.8 এর সাথে বান্ডিল হয়ে আসে, সুতরাং এই ব্যবহারকারীদের জন্য কোনও ইনস্টলেশন প্রয়োজন হয় না।
মার্ক-আন্দ্রে লাফোর্টুন

3
আপনি 'thengström' নামের প্রাথমিক (কীভাবে ইউটিএফ -8) পাবেন কীভাবে এটি রুবি 1.8.x এবং 1.9.x উভয় ক্ষেত্রে প্রত্যাশার মতো কাজ করবে? প্রস্তাবিত পদ্ধতিগুলির কোনওটিই 1.8.x এ কাজ করবে না।
লার্স হগসেট




12

কারাগারে

name = 'Smith'
name.first 

ব্যবহারের সহজ উপায়। উত্তরের জন্য ধন্যবাদ.
AMIC মিং


5
>> s = 'Smith'                                                          
=> "Smith"                                                              
>> s[0]                                                                 
=> "S"                                                        

1
মনে রাখবেন যে এটি কেবল রুবি 19 তে কাজ করে। রুবি 18 এ "Smith"[0]'এস' অক্ষরের পূর্ণসংখ্যার মানটি ফিরিয়ে দেয়। উভয় সংস্করণ মান্য করে "Smith"[0,1] == "S"
রমপিন

1
@ আরম্পিয়ান: আসলেই। আমি "Smith"[0] == ?Sরুবি 1.8 এবং 1.9 উভয়ের ক্ষেত্রেই এটি যুক্ত করব
মার্ক-আন্দ্রে লাফোর্টুন

2

1.9 সামনে রুবি একটি বিরক্তিকর নকশা পছন্দ কারণ - some_string[0]ফেরৎ চরিত্র কোড এই হল লিখতে সবচেয়ে পোর্টেবল উপায় - প্রথম অক্ষরের some_string[0,1]যা বলে সূচক 0 যে 1 টি অক্ষর দীর্ঘ একটি সাবস্ট্রিং জন্য।


str [0,1] 1.8 এবং 1.9 তেও একইভাবে কাজ করে না, যেমনটি পূর্বের মতো এটি প্রথম বাইটটি দেয় যখন পরবর্তীকালে এটি প্রথম চরিত্রটি দেয়
লার্স হগসেট

1
মাল্টিবাইট ভাষাগুলির জন্য 1.9 এর সমর্থন অনুসারে সূচকগুলি কীভাবে এত বেশি কাজ করে তার মধ্যে এটি কোনও পার্থক্য নয়। তারা উভয়ই প্রথম চরিত্রটি ফিরিয়ে আনতে চাইছিল, তবে "চরিত্র" কী তা সম্পর্কে 1.8 এর আরও মজাদার দৃষ্টিভঙ্গি রয়েছে।
চক

2

অন্য একটি বিকল্প যা এখনও উল্লেখ করা হয়নি:

> "Smith".slice(0)
#=> "S"

0

আপনি ব্যবহার করতে পারেন truncate

> 'Smith'.truncate(1, omission: '')
#=> "S"

বা অতিরিক্ত বিন্যাসের জন্য:

> 'Smith'.truncate(4)
#=> "S..."

> 'Smith'.truncate(2, omission: '.')
#=> "S."

-1

এই পদ্ধতিগুলির যে কোনও কাজ করবে:

name = 'Smith'
puts name.[0..0] # => S
puts name.[0] # => S
puts name.[0,1] # => S
puts name.[0].chr # => S

1
কোনটি এই পদ্ধতি যে সঙ্গে কাজ করবে .পর name। এবং সর্বশেষটি সংবেদনশীল, এমনকি যদি আপনি এটি অপসারণ করেন ., কারণ এটি একই জিনিস করতে দুটি পৃথক পদ্ধতি ব্যবহার করে - [0] এবং chr()
jeffdill2
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.