একটি নির্দিষ্ট টুকরো অ্যাক্সেস করতে একটি এনএসএস স্ট্রিং বিভক্ত করুন


142

আমার মতো স্ট্রিং রয়েছে: @"10/04/2011"এবং আমি অন্য স্ট্রিংয়ে কেবল "10" সংরক্ষণ করতে চাই। আমি এটা কিভাবে করবো?


1
এনএসডিট এবং এনএসডিট ফরমেটার ব্যবহার করা সবচেয়ে ভাল সমাধান। অতিরিক্ত ক্রেডিট এবং আরও ভাল মানের কোড যদি আপনি বাস্তবে এটি সিস্টেমের সাথে স্থানীয়ভাবে তৈরি করেন সম্ভবত মাস / দিনের দিন / মাসের পার্থক্যগুলি মোকাবেলা করতে।
এরিকলাইফ

@ এরিকলাইফ প্রশ্নের মধ্যে যেখানে এটি বলে যে স্ট্রিংটি একটি তারিখ?
জেরেমিপি

উত্তর:


376
NSArray* foo = [@"10/04/2011" componentsSeparatedByString: @"/"];
NSString* firstBit = [foo objectAtIndex: 0];

আপডেট 7/3/2018:

এখন যেহেতু প্রশ্নটি একটি সুইফ্ট ট্যাগ অর্জিত হয়েছে, আমার এটি করা সুইফট পদ্ধতিটি যুক্ত করা উচিত। এটি বেশ সহজ হিসাবে:

let substrings = "10/04/2011".split(separator: "/")
let firstBit = substrings[0]

যদিও নোট করুন এটি আপনাকে একটি অ্যারে দেয় Substring। আপনার যদি এগুলিকে সাধারণ স্ট্রিতে রূপান্তর করতে হয় তবে ব্যবহার করুনmap

let strings = "10/04/2011".split(separator: "/").map{ String($0) }
let firstBit = strings[0]

অথবা

let firstBit = String(substrings[0])

1
[foo firstObject]সাধারণ ক্ষেত্রে ব্যবহার করা আরও ভাল হতে পারে কারণ এটি খালি অ্যারেও সঠিকভাবে পরিচালনা করবে।
বোব্রভস্কি

2
@ বিসিব্রোস্কি সাধারণ ক্ষেত্রে স্ট্রিংটি তারিখ নিশ্চিত করে তা যাচাই করা ভাল। এটি কেবলমাত্র একটি উদাহরণ যা নির্দিষ্ট প্রশ্নের উত্তর দেয়। তিনটি তারিখের অংশের কোনও পাওয়াও আরও সাধারণ is
জেরেমিপ

উপভোগের জনতা থাকা সত্ত্বেও আমাকে একমত হতে হবে না। প্রথমত, আপনি কেন 10 এর মাসের পরিবর্তে দিন বলে মনে করেন? এই ধরণের ভুল নেতৃত্বের পদ্ধতির হ'ল কেন আমাদের Y2K সমস্যা ছিল।
এরিকলাইফ

2
@ এরিকলাইফ প্রশ্নটি বলছে "আমি কেবল একটি স্ট্রিংয়ে 10 টি সংরক্ষণ করতে চাই"। আমি ভেরিয়েবলকে কিছু বলতে পারতাম। উত্তর প্রশ্নের জন্য সঠিক। আসলে, কোথাও প্রশ্নটি বলে না যে এটি একটি তারিখ, তাই আমি উত্তরটি সংশোধন করেছি।
জেরেমিপ

36

এই 2 এর যে কোনও একটি:

NSString *subString = [dateString subStringWithRange:NSMakeRange(0,2)];
NSString *subString = [[dateString componentsSeparatedByString:@"/"] objectAtIndex:0];

যদিও মনে রাখবেন যে কখনও কখনও তারিখের স্ট্রিং সঠিকভাবে ফর্ম্যাট হয় না এবং একটি দিন (বা সেই বিষয়ে এক মাস) 08 এর পরিবর্তে 8 হিসাবে দেখানো হয় তাই প্রথম সমাধানটি 2 টির মধ্যে সবচেয়ে খারাপ হতে পারে।

পরবর্তীটি পৃথক অ্যারেতে রাখা উচিত যাতে আপনি ফিরে আসা জিনিসটির দৈর্ঘ্যটি যাচাই করতে পারেন, সুতরাং আপনার যে উত্স থেকে কোনও দুর্নীতিগ্রস্থ বা অবৈধ তারিখের স্ট্রিংয়ের ক্ষেত্রে আপনি কোনও ব্যতিক্রম পাবেন না।


এটি সঠিক, কেবল লক্ষ্য করুন যে সাবস্ট্রিংউইথরেঞ্জ পদ্ধতিতে দ্বিতীয় "এস" "লোয়ার কেস" (স্ট্রিংউইথরেঞ্জ) হওয়া উচিত নয় বা আপনি "এই পদ্ধতিটির অস্তিত্ব নেই" এর মতো একটি ত্রুটি পাবেন।
মার্কোস রেবুকাস

9

এটা ঠিক আছে

NSString *dateString = @"10/10/2010";//Date 
NSArray* dateArray = [dateString componentsSeparatedByString: @"/"];
NSString* dayString = [dateArray objectAtIndex: 0];

8

উদ্দেশ্য গ:

     NSString *day = [@"10/04/2011" componentsSeparatedByString:@"/"][0];

সুইফট:

     var day: String = "10/04/2011".componentsSeparatedByString("/")[0]


5

আমি নীচে আরও জেনেরিক পুনরায় ব্যবহারযোগ্য ফাংশনে জেরেমিপ দ্বারা সরবরাহ করা সুন্দর সমাধানটি ফর্ম্যাট করেছি :

///Return an ARRAY containing the exploded chunk of strings
+(NSArray*)explodeString:(NSString*)stringToBeExploded WithDelimiter:(NSString*)delimiter
{
    return [stringToBeExploded componentsSeparatedByString: delimiter];
}

5
কেন কেবলমাত্র সেপ্রেটেডবাইস্ট্রিং সরাসরি ব্যবহার করবেন না?
জন গিব

1
কারণ আমি এটি বেশ কয়েকটি প্রকল্প জুড়ে ব্যবহার করছি, তাই যদি কিছু পরিবর্তন হয় তবে আমাকে কেবল বেশ কয়েকটি স্থানে বদলে র‍্যাপার ফাংশনটির শরীর পরিবর্তন করতে হবে। তবে আপনি যদি এটি একবার ব্যবহার করেন তবে হ্যাঁ এটি সরাসরি চিয়ার্স ব্যবহার করে আরও বোধগম্য হয় !
খায়রাট্টি ওয়াসিম

3
উপাদানগুলি সেপ্রেটেডবাইস্ট্রিং দুই দশকের মতো কিছুতেই পরিবর্তিত হয়নি। অ্যাপল পদ্ধতিতে সমস্ত কল পরিবর্তিত হলে তারা কী আবদ্ধ করবেন? আপনাকে অবশ্যই অনেক টাইপ করতে হবে।
সরঞ্জামচালক

1

সুইফট 3.0 সংস্করণ

let arr = yourString.components(separatedBy: "/")
let month = arr[0]
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.