আপনি কিভাবে একটি দৈর্ঘ্য পেতে String
? উদাহরণস্বরূপ, আমার মত একটি ভেরিয়েবল সংজ্ঞায়িত রয়েছে:
var test1: String = "Scott"
যাইহোক, আমি স্ট্রিংয়ের মধ্যে কোনও দৈর্ঘ্যের পদ্ধতি খুঁজে পাচ্ছি না।
আপনি কিভাবে একটি দৈর্ঘ্য পেতে String
? উদাহরণস্বরূপ, আমার মত একটি ভেরিয়েবল সংজ্ঞায়িত রয়েছে:
var test1: String = "Scott"
যাইহোক, আমি স্ট্রিংয়ের মধ্যে কোনও দৈর্ঘ্যের পদ্ধতি খুঁজে পাচ্ছি না।
উত্তর:
সুইফ্ট 4+ হিসাবে
এটা শুধু:
test1.count
কারণে.
(মার্টিন আর কে ধন্যবাদ)
সুইফট 2 হিসাবে:
সুইফট ২-এর সাহায্যে অ্যাপল গ্লোবাল ফাংশনগুলিকে প্রোটোকল এক্সটেনশনগুলিতে পরিবর্তন করেছে, প্রোটোকলের সাথে মানানসই যে কোনও প্রকারের সাথে মেলে এমন এক্সটেনশনগুলি। সুতরাং নতুন সিনট্যাক্সটি হ'ল:
test1.characters.count
(মাথা উঁচু করার জন্য জনডিফুলকে ধন্যবাদ)
সুইফট 1 হিসাবে
গণনা অক্ষরের পদ্ধতিটি ব্যবহার করুন:
let unusualMenagerie = "Koala 🐨, Snail 🐌, Penguin 🐧, Dromedary 🐪"
println("unusualMenagerie has \(count(unusualMenagerie)) characters")
// prints "unusualMenagerie has 40 characters"
ঠিক অ্যাপল সুইফট গাইড থেকে
(দ্রষ্টব্য, সুইফটের সংস্করণগুলির জন্য 1.2 এরও আগে, এটি countElements(unusualMenagerie)
পরিবর্তে হবে)
আপনার পরিবর্তনশীল জন্য, এটি হবে
length = count(test1) // was countElements in earlier versions of Swift
অথবা আপনি test1.utf16count ব্যবহার করতে পারেন
string.count
।
জন্য সুইফট 2.0 এবং 3.0, ব্যবহার test1.characters.count
। তবে, কয়েকটি জিনিস আপনার জানা উচিত। সুতরাং, পড়ুন।
সুইফট ২.০ এর আগে count
একটি বিশ্বব্যাপী কাজ ছিল। সুইফট ২.০ হিসাবে, এটি সদস্য ফাংশন হিসাবে বলা যেতে পারে।
test1.characters.count
এটি একটিতে ইউনিকোডের অক্ষরের প্রকৃত সংখ্যাটি ফিরিয়ে দেবে String
, সুতরাং এটি অর্থে সবচেয়ে সঠিক বিকল্প যে আপনি যদি স্ট্রিংটি মুদ্রণ করতে এবং হাতের সাথে অক্ষর গণনা করেন তবে আপনি একই ফলাফল পেয়ে যাবেন।
যাইহোক, Strings
উপায়টি সুইফটে বাস্তবায়িত হওয়ার কারণে , অক্ষরগুলি সর্বদা একই পরিমাণের মেমরি গ্রহণ করে না, তাই সচেতন হন যে এটি অন্যান্য ভাষায় স্বাভাবিক অক্ষর গণনা পদ্ধতির চেয়ে বেশ আলাদা আচরণ করে।
উদাহরণস্বরূপ, আপনি এটি ব্যবহার করতে পারেন test1.utf16.count
কিন্তু, নিচের উল্লিখিত ফিরে মান কলিং যে একই হতে নিশ্চিত করা হয় না count
উপর characters
।
ভাষার রেফারেন্স থেকে:
বর্ধিত গ্রাফি ক্লাস্টারগুলি এক বা একাধিক ইউনিকোড স্কেলারের সমন্বয়ে গঠিত হতে পারে। এর অর্থ হ'ল বিভিন্ন অক্ষর এবং একই চরিত্রের বিভিন্ন উপস্থাপনা — সঞ্চয় করতে বিভিন্ন পরিমাণের মেমরির প্রয়োজন হতে পারে। এ কারণে, সুইফ্টের অক্ষরগুলি প্রতিটি স্ট্রিংয়ের উপস্থাপনের মধ্যে একই পরিমাণের মেমরি গ্রহণ করে না। ফলস্বরূপ, স্ট্রিংয়ের অক্ষরগুলির সংখ্যা তার প্রসারিত গ্রাফিয়াম ক্লাস্টার সীমানা নির্ধারণের জন্য স্ট্রিংটির মাধ্যমে পুনরাবৃত্তি না করে গণনা করা যায় না। আপনি যদি বিশেষত দীর্ঘ স্ট্রিং মানগুলির সাথে কাজ করছেন তবে সচেতন হন যে অক্ষরের বৈশিষ্ট্যটি অবশ্যই সেই স্ট্রিংয়ের জন্য অক্ষরগুলি নির্ধারণ করার জন্য পুরো স্ট্রিংয়ে ইউনিকোড স্কেলারের উপরে পুনরাবৃত্তি করতে হবে।
অক্ষরের বৈশিষ্ট্য দ্বারা ফিরে আসা অক্ষরের গণনা সর্বদা কোনও এনএসএসস্ট্রিংয়ের দৈর্ঘ্যের সম্পত্তি হিসাবে একই অক্ষর সমেত এক হয় না। একটি এনএসএসস্ট্রিংয়ের দৈর্ঘ্য স্ট্রিংয়ের ইউটিএফ -16 উপস্থাপনার মধ্যে 16 বিট কোড ইউনিটের সংখ্যার উপর ভিত্তি করে এবং স্ট্রিংয়ের মধ্যে ইউনিকোড বর্ধিত গ্রাফি ক্লাস্টারের সংখ্যার উপর ভিত্তি করে নয়।
উপরোক্ত বর্ণিত পরিস্থিতিটি পুরোপুরি চিত্রিত করে এমন একটি উদাহরণ মন্তব্যগুলিতে n00neimp0rtant দ্বারা নির্দেশিত হিসাবে একটি একক ইমোজি চরিত্রযুক্ত স্ট্রিংয়ের দৈর্ঘ্য পরীক্ষা করা ।
var emoji = "👍"
emoji.characters.count //returns 1
emoji.utf16.count //returns 2
countElements()
) স্ট্রিংয়ের অক্ষরের সঠিক সংখ্যা পায়। [str length]
আপনি ওজেক্টিভ-সি-তে কল করা থেকে যা পেতে চান তার থেকে এটি আলাদা হতে পারে , কারণ length
পদ্ধতিটি ধরে নিয়েছে যে স্ট্রিংয়ের সমস্ত অক্ষর 16-বিট কোড ইউনিট সমন্বিত, যখন countElements()
ইউনিকোড অক্ষরের আসল সংখ্যা পায়। যাইহোক, উপরের বিকল্পগুলির বেশিরভাগ সময় একই ফলাফল ফিরে আসবে, বিশেষত যদি আপনি ইংরেজি ভাষার সাধারণ অক্ষরগুলি নিয়ে কাজ করছেন।
সুইফট ২.২ আপডেট: সংগ্রহের আকার গণনা করার জন্য আর কোনও গণনা উপাদান নেই। প্রতিস্থাপন হিসাবে কেবল গণনা কার্যটি ব্যবহার করুন: গণনা ("সুইফ্ট")
সুইফট 2.0, 3.0 এবং 3.1:
strLength = স্ট্রিং
সুইফট ৪.২ (৪.০ এর পরে): [অ্যাপল ডকুমেন্টেশন - স্ট্রিংস]
strLength = স্ট্রিং.কাউন্ট দিন
সুইফট 1.1
extension String {
var length: Int { return countElements(self) } //
}
সুইফট ১.২
extension String {
var length: Int { return count(self) } //
}
সুইফট ২.০
extension String {
var length: Int { return characters.count } //
}
সুইফট 4.2
extension String {
var length: Int { return self.count }
}
let str = "Hello"
let count = str.length // returns 5 (Int)
সুইফট 4
"string".count
;)
সুইফট 3
extension String {
var length: Int {
return self.characters.count
}
}
ব্যবহার
"string".length
//: Playground - noun: a place where people can play import UIKit var str = "Hello, playground" print(type(of: str.characters.count)) print(type(of: str.count))
আপনি যদি কেবল কোনও স্ট্রিং ফাঁকা আছে কিনা তা দেখার চেষ্টা করছেন (0 দৈর্ঘ্যের জন্য পরীক্ষা করছেন), সুইফট এতে একটি সাধারণ বুলিয়ান পরীক্ষা পদ্ধতি সরবরাহ করে String
myString.isEmpty
এই মুদ্রার অন্য দিকটি ছিল লোকেরা ওজেক্টিভ সিটিতে জিজ্ঞাসা করেছিল যে যেখানে উত্তরটি 0 দৈর্ঘ্যের জন্য পরীক্ষা করা উচিত সেখানে স্ট্রিং ফাঁকা আছে কিনা তা জিজ্ঞাসা করবেন:
tl; dr আপনি যদি মানব-পঠনযোগ্য অক্ষরের সংখ্যার বিচারে কোনও স্ট্রিং টাইপের দৈর্ঘ্য চান তবে countE উপাদান () ব্যবহার করুন । আপনি যদি প্রসারিত গ্রাফিয়াম ক্লাস্টারের সংখ্যার বিচারে দৈর্ঘ্য জানতে চান তবে এন্ডআইডেক্সটি ব্যবহার করুন । বিস্তারিত পড়ুন।
স্ট্রিং টাইপ আদেশ সংগ্রহে ইউনিকোড অক্ষরের (অর্থাত, ক্রম) হিসেবে বাস্তবায়িত হয়, এবং এটি কে কনর্ফাম করে CollectionType প্রোটোকল যা কনর্ফাম _CollectionType প্রোটোকল, যা ইনপুট দ্বারা প্রত্যাশিত ধরনের countElements () । অতএব, একটি স্ট্রিং ধরণ পেরিয়ে কাউন্টএলমেন্টস () বলা যেতে পারে এবং এটি অক্ষরের গণনা ফিরিয়ে দেবে।
যাইহোক, কালেকশন টাইপের সাথে সঙ্গতিপূর্ণ , যা ঘুরেফিরে _ Colલેક્શન টাইপ অনুসারে হয় , স্ট্রিং স্টার্টইন্ডেক্স এবং এন্ড ইন্ডেক্স গণিত বৈশিষ্ট্যগুলি প্রয়োগ করে , যা প্রকৃতপক্ষে প্রথম অক্ষর গুচ্ছের আগে সূচকের অবস্থান এবং যথাক্রমে শেষ অক্ষর গুচ্ছের পরে সূচকের অবস্থান উপস্থাপন করে । সুতরাং, "এ বি সি" স্ট্রিং-এ, এ এর আগে সূচকের অবস্থান 0 হয় এবং সি এর পরে হয় 3 সুতরাং, endIndex = 3, যা স্ট্রিংয়ের দৈর্ঘ্যও।
সুতরাং, এন্ডআইডেক্স কোনও স্ট্রিং টাইপের দৈর্ঘ্য পেতে ব্যবহার করা যেতে পারে, ঠিক আছে তো?
ঠিক আছে, সর্বদা নয় ... ইউনিকোড অক্ষরগুলি আসলে গ্রাথিয়াম ক্লাস্টারগুলিতে প্রসারিত হয় , যা একক একাধিক ইউনিকোড স্কেলারের একত্রিত হয়ে একটি একক মানব-পঠনযোগ্য চরিত্র তৈরি করে।
let circledStar: Character = "\u{2606}\u{20DD}" // ☆⃝
সার্কেলড স্টার হ'ল ইউ + 2606 (একটি সাদা তারা) এবং ইউ + 20 ডিডি (একটি সংমিশ্রিত এনক্লোজিং বৃত্ত) দ্বারা গঠিত একক অক্ষর। আসুন বৃত্তাকার স্টার থেকে একটি স্ট্রিং তৈরি করি এবং কাউন্টএলিমেন্টের ফলাফল () এবং এন্ডআইডেক্সের তুলনা করি ।
let circledStarString = "\(circledStar)"
countElements(circledStarString) // 1
circledStarString.endIndex // 2
এখানে একটি বিশ্বব্যাপী ফাংশন ব্যবহারের চেয়ে আরও খাটো এবং প্রাকৃতিক কিছু:
aString.utf16count
যদিও এটি বিটা 1 এ পাওয়া যায় তা আমি জানি না। তবে এটি অবশ্যই বিটা 2-তে রয়েছে।
এক্সকোড 6 বিটা 4 এর জন্য আপডেট হয়েছে, পদ্ধতিটি পরিবর্তন করুন utf16count -> utf16 অ্যাকাউন্ট
var test1: String = "Scott"
var length = test1.utf16Count
অথবা
var test1: String = "Scott"
var length = test1.lengthOfBytesUsingEncoding(NSUTF16StringEncoding)
utf16count
ভুল হবে
হিসাবে সুইফট 1.2 utf16Count
অপসারণ করা হয়েছে। আপনার এখন গ্লোবাল count()
ফাংশনটি ব্যবহার করা উচিত এবং স্ট্রিংয়ের ইউটিএফ 16 ভিউটি পাস করা উচিত । নীচে উদাহরণ ...
let string = "Some string"
count(string.utf16)
এক্সকোড 7.3 এবং সুইফট 2.2 এর জন্য।
let str = "🐶"
আপনি যদি ভিজ্যুয়াল অক্ষরের সংখ্যা চান:
str.characters.count
আপনি যদি স্ট্রিংয়ের UTF-16 উপস্থাপনার মধ্যে "16-বিট কোড ইউনিট চান":
str.utf16.count
বেশিরভাগ সময়, 1 আপনার প্রয়োজন হয়।
আপনার কখন 2 দরকার হবে ? আমি 2 এর জন্য একটি ব্যবহারের কেস পেয়েছি :
let regex = try! NSRegularExpression(pattern:"🐶",
options: NSRegularExpressionOptions.UseUnixLineSeparators)
let str = "🐶🐶🐶🐶🐶🐶"
let result = regex.stringByReplacingMatchesInString(str,
options: NSMatchingOptions.WithTransparentBounds,
range: NSMakeRange(0, str.utf16.count), withTemplate: "dog")
print(result) // dogdogdogdogdogdog
আপনি যদি 1 টি ব্যবহার করেন তবে ফলাফলটি ভুল:
let result = regex.stringByReplacingMatchesInString(str,
options: NSMatchingOptions.WithTransparentBounds,
range: NSMakeRange(0, str.characters.count), withTemplate: "dog")
print(result) // dogdogdog🐶🐶🐶
সুইফট ২.০: একটি গণনা পান: yourString.text.characters.count
এটি কীভাবে কার্যকর হবে তার মজার উদাহরণটি ইউআইটিেক্সটভিউতে কিছু নম্বর (উদাহরণস্বরূপ 150) থেকে একটি চরিত্রের কাউন্টডাউন দেখানো হবে:
func textViewDidChange(textView: UITextView) {
yourStringLabel.text = String(150 - yourStringTextView.text.characters.count)
}
সুইফট 4-এ আমি সর্বদা ব্যবহার string.count
করেছি আজ অবধি আমি এটি পেয়েছি
string.endIndex.encodedOffset
এটি আরও ভাল বিকল্প কারণ এটি দ্রুত - 50 000 অক্ষরের স্ট্রিং এর চেয়ে প্রায় 6 বার দ্রুত .count
। .count
স্ট্রিং দৈর্ঘ্য উপর নির্ভর করে কিন্তু .endIndex.encodedOffset
না।
তবে একটি নেই। ইমোজিসের সাথে স্ট্রিংয়ের পক্ষে এটি ভাল নয়, এটি ভুল ফলাফল দেবে, তাই কেবল .count
সঠিক।
ইন সুইফট 4 : না স্ট্রিং হলে ইউনিকোড অক্ষর এর পরে নিম্নলিখিত ব্যবহার
let str : String = "abcd"
let count = str.count // output 4
যদি স্ট্রিংটিতে ইউনিকোড অক্ষর থাকে তবে নিম্নলিখিতগুলি ব্যবহার করুন:
let spain = "España"
let count1 = spain.count // output 6
let count2 = spain.utf8.count // output 7
utf8.count
? এটি অক্ষরের গণনা দেয় না। এটি স্ট্রিংয়ের ইউটিএফ -8 এনকোডিংয়ের জন্য প্রয়োজনীয় বাইটের সংখ্যা দেয়।
এক্সকোডে 6.1.1
extension String {
var length : Int { return self.utf16Count }
}
আমি মনে করি যে মস্তিষ্কে প্রতিটি ছোটখাট সংস্করণে এটি পরিবর্তন হবে।
আপনার পাঠ্যদর্শন বা পাঠ্য ক্ষেত্র থেকে স্ট্রিং মান পান:
let textlengthstring = (yourtextview?.text)! as String
স্ট্রিংয়ের মধ্যে অক্ষরের সংখ্যাটি সন্ধান করুন:
let numberOfChars = textlength.characters.count
এখানেই আমি শেষ করেছিলাম
let replacementTextAsDecimal = Double(string)
if string.characters.count > 0 &&
replacementTextAsDecimal == nil &&
replacementTextHasDecimalSeparator == nil {
return false
}
return true
?)। আপনি দয়া করে ডাবল চেক করতে পারেন এবং, ক্ষেত্রে, আপনার উত্তর সম্পাদনা করতে পারেন? ধন্যবাদ!
সুইফট 4 আপডেটটি সুইফট 3 এর সাথে তুলনা করে
সুইফট 4 স্ট্রিংয়ের জন্য একটি অক্ষরের অ্যারের প্রয়োজনীয়তা সরিয়ে দেয়। এর অর্থ আপনি count
অক্ষরে প্রথমে অ্যারে না পেয়ে সরাসরি স্ট্রিংয়ে কল করতে পারেন ।
"hello".count // 5
যেখানে সুইফ্ট 3 এ আপনাকে অক্ষরের অ্যারে পেতে হবে এবং তারপরে সেই অ্যারেতে উপাদান গণনা করতে হবে। নোট করুন যে নিম্নলিখিত পদ্ধতিটি এখনও সুইফট ৪.০ এ উপলব্ধ কারণ আপনি এখনও characters
প্রদত্ত স্ট্রিংয়ের অক্ষরের অ্যারে অ্যাক্সেস করতে কল করতে পারেন
"hello".characters.count // 5
সুইফট 4.0 ইউনিকোড 9 গ্রহণ করে এবং এটি এখন গ্রাফি ক্লাস্টারদের ব্যাখ্যা করতে পারে। উদাহরণস্বরূপ, ইমোজি তে গণনা আপনাকে 1 প্রদান করবে যখন সাফ 3.0 in এ, আপনি 1 এর চেয়ে বেশি গণনা পেতে পারেন।
"👍🏽".count // Swift 4.0 prints 1, Swift 3.0 prints 2
"👨❤️💋👨".count // Swift 4.0 prints 1, Swift 3.0 prints 4
আপনি সহজেই একটি এক্সটেনশান লিখে দৈর্ঘ্য পেতে পারেন:
extension String {
// MARK: Use if it's Swift 2
func stringLength(str: String) -> Int {
return str.characters.count
}
// MARK: Use if it's Swift 3
func stringLength(_ str: String) -> Int {
return str.characters.count
}
// MARK: Use if it's Swift 4
func stringLength(_ str: String) -> Int {
return str.count
}
}
var str = "Hello, playground"
var newString = str as NSString
countElements(str)
এটি নিয়মিত সুইফ্ট স্ট্রিংয়ের চরিত্রগুলি গণনা করে
countElements((newString as String))
এটি একটি এনএসএস স্ট্রিংয়ে অক্ষর গণনা করে
স্ট্রিং এবং এনএসএসস্ট্রিং টোল ফ্রি ব্রিজ তাই আপনি এনএসএসস্ট্রিংয়ের জন্য উপলব্ধ সমস্ত পদ্ধতি সুইফ্ট স্ট্রিং সহ ব্যবহার করতে পারবেন
let x = "test" as NSString
let y : NSString = "string 2"
let lenx = x.count
let leny = y.count
test1.characters.count
আপনার স্ট্রিংয়ে আপনি অক্ষর / সংখ্যা ইত্যাদির সংখ্যা পাবেন।
উদা:
test1 = "StackOverflow"
print(test1.characters.count)
( " 13 " মুদ্রণ )
অ্যাপল এটিকে অন্য প্রধান ভাষা থেকে আলাদা করেছে। বর্তমান উপায় কল করতে হয়:
test1.characters.count
যাইহোক, সাবধানতা অবলম্বন করার জন্য, আপনি যখন দৈর্ঘ্যটি বলতে চান তার অর্থ অক্ষরের সংখ্যা গণনা বাইটের গণনা নয়, কারণ যখন আপনি অ-এসিআই অক্ষর ব্যবহার করেন তখন এই দুটি আলাদা হতে পারে।
উদাহরণ স্বরূপ;
"你好啊hi".characters.count
আপনাকে 5 দিবে তবে এটি বাইটের গণনা নয়। বাইটগুলির প্রকৃত গণনা পেতে, আপনাকে তা করতে হবে "你好啊hi".lengthOfBytes(using: String.Encoding.utf8)
। এটি আপনাকে 11 দেবে।
এখনই (সুইফট ২.৩ এ) আপনি যদি ব্যবহার করেন:
myString.characters.count
পদ্ধতিটি "দূরত্ব" টাইপটি ফিরিয়ে দেবে, যদি কোনও পূর্ণসংখ্যা ফেরত দেওয়ার জন্য আপনার যদি পদ্ধতিটির প্রয়োজন হয় তবে আপনার এভাবে কাস্ট টাইপ করা উচিত:
var count = myString.characters.count as Int
Distance
এর String.CharacterView
হয় Int
, এই ঢালাই জন্য কোন প্রয়োজন সেখানে উচিত।