একটি স্ট্রিংকে সুইফটে একটি অ্যারেতে বিভক্ত করবেন?


686

বলুন আমার এখানে একটি স্ট্রিং রয়েছে:

var fullName: String = "First Last"

আমি স্ট্রিং বেসটি সাদা স্পেসে বিভক্ত করতে এবং মানগুলি তাদের নিজ নিজ ভেরিয়েবলগুলিতে নির্ধারণ করতে চাই

var fullNameArr = // something like: fullName.explode(" ") 

var firstName: String = fullNameArr[0]
var lastName: String? = fullnameArr[1]

এছাড়াও, কখনও কখনও ব্যবহারকারীদের একটি শেষ নাম নাও থাকতে পারে।


13
হাই, আমার কাছে আমার ম্যাক চেক করার দরকার নেই। তবে আপনি 'fullName.compompartSeparatedByString (স্ট্রিং: "") চেষ্টা করতে পারেন' অনুলিপি এবং পেস্ট করবেন না, স্বতঃসম্পূর্ণ ফাংশনটি ব্যবহার করুন, যাতে আপনি সঠিক ফাংশন পান get
ডেভিড গলজুয়েসার

আপনি যদি কেবলমাত্র একটি চরিত্র দ্বারা বিভাজন করেন তবে fullName.utf8.split( <utf-8 character code> )কাজগুলিও ব্যবহার করে ( ইউটিএফ -16 এর .utf8সাথে প্রতিস্থাপন করুন .utf16)। উদাহরণস্বরূপ, বিভক্তকরণটি +ব্যবহার করে করা যেতে পারেfullName.utf8.split(43)
জোজডমো

এছাড়াও, "ড্যাফনে ডু মরিয়ার" বা "চার্লস ডি লিন্ট"
বেরি

উত্তর:


784

সুইফট উপায়টি হ'ল গ্লোবাল splitফাংশনটি ব্যবহার করা , যেমন:

var fullName = "First Last"
var fullNameArr = split(fullName) {$0 == " "}
var firstName: String = fullNameArr[0]
var lastName: String? = fullNameArr.count > 1 ? fullNameArr[1] : nil

সঙ্গে সুইফট 2

অভ্যন্তরীণ ক্যারেক্টারভিউ প্রকারের প্রবর্তনের কারণে সুইফ্ট ২-এ বিভক্তির ব্যবহার কিছুটা জটিল হয়ে যায়। এর অর্থ হ'ল স্ট্রিং আর সিকোয়েন্সটাইপ বা কালেকশন .charactersটাইপ প্রোটোকল গ্রহণ করে না এবং পরিবর্তে স্ট্রিংয়ের উদাহরণের চরিত্রদর্শন টাইপের উপস্থাপনাটি অ্যাক্সেস করার জন্য আপনাকে সম্পত্তিটি ব্যবহার করতে হবে । (দ্রষ্টব্য: ক্যারেক্টারভিউ সিকোয়েন্সটাইপ এবং কালেকশন টাইপ প্রোটোকল গ্রহণ করে)।

let fullName = "First Last"
let fullNameArr = fullName.characters.split{$0 == " "}.map(String.init)
// or simply:
// let fullNameArr = fullName.characters.split{" "}.map(String.init)

fullNameArr[0] // First
fullNameArr[1] // Last 

98
আমার পরীক্ষায়, উপাদানগুলি সেপ্রেটেডবাইস্ট্রিং সাধারণত উল্লেখযোগ্যভাবে দ্রুত হয়, বিশেষত স্ট্রিংগুলির সাথে ডিল করার সময় যা বিভিন্ন টুকরোতে বিভক্ত হয় require তবে ওপি দ্বারা তালিকাভুক্ত উদাহরণের জন্য হয় পর্যাপ্ত হওয়া উচিত।
কেসি পার্কিনস

9
এক্সকোড হিসাবে 6.2b3 বিভাজন হিসাবে ব্যবহার করা যেতে পারে split("a:b::c:", {$0 == ":"}, maxSplit: Int.max, allowEmptySlices: false)
প্যাস্কেল

14
কেবল মনে রাখবেন যে componentsSeparatedByString()আপনার বিভাজক একক অক্ষরের চেয়ে দীর্ঘতর কিছু হলে আপনার এখনও পুরানো পদ্ধতিটি ব্যবহার করা দরকার । এবং এটি যতটা দুর্দান্ত বলা উচিত let (firstName, lastName) = split(fullName) {$0 == ' '}, এটি কাজ করে না, দুঃখের সাথে।
NRitH

3
@ কাশিফ তখন আপনি ব্যবহার করতে পারেন split("a,b;c,d") {$0 == "," || $0 == ";"}বাsplit("a,b;c,d") {contains(",;", $0)}
ইথান

4
এক্সকোড .0.০ এর জন্য সঠিক কোডটি ফুলনেমএআরআর = পূর্ণনাম। সম্পাদনা করার চেষ্টা করা হয়েছিল, কিন্তু এটি প্রত্যাখ্যান হয়েছে।
স্কেজেডাল

1015

কেবল আপনার componentsSeparatedByStringপদ্ধতিতে কল করুনfullName

import Foundation

var fullName: String = "First Last"
let fullNameArr = fullName.componentsSeparatedByString(" ")

var firstName: String = fullNameArr[0]
var lastName: String = fullNameArr[1]

সুইফট 3+ এর জন্য আপডেট

import Foundation

let fullName    = "First Last"
let fullNameArr = fullName.components(separatedBy: " ")

let name    = fullNameArr[0]
let surname = fullNameArr[1]

3
মনে রাখবেন যে এটি আসলে অন্তর্নিহিত NSString(সুইড স্বয়ংক্রিয়ভাবে এগুলি আমদানির সময় সজ্জিত করে Foundation)।
ক্যান

1
যা এখন আর সুইফট ২.২-তে ঘটেনি, এতে অ্যাপল আর সুইচটির স্ট্রিংকে স্বয়ংক্রিয়ভাবে এনএসএস স্ট্রিংয়ে রূপান্তরিত করে না।
এলকুকো

6
এই উত্তরটি এক্সকোড 7 বিটা 4 এবং সুইফট 2.0 তে কাজ করে। এক্সকোড এখন কোনও এনএসএসস্ট্রিং-তে টাইপ কাস্টিং ছাড়াই সুইফ্ট স্ট্রিং অবজেক্টগুলিতে ফাউন্ডেশন পদ্ধতিগুলি স্বয়ংক্রিয়ভাবে সম্পূর্ণ করে, যা সুইফট ১.২ সহ এক্সকোড .4.৪-এ নয়।
অ্যান্ড্রু

1
আমি ফাউন্ডেশন আমদানি না করা পর্যন্ত এটি আরপিএলে কাজ করে না।
ভেলিজার হরিস্টভ

1
এটি এক্সকোড .2.২-তে প্রত্যাশিত (যেমন ফুলনামআর একটি [String]) ঠিক ঠিক কাজ করে ।
জন কক্স

185

এটির সবচেয়ে সহজ পদ্ধতিটি সেপ্রেটেড বাই ব্যবহার করে:

সুইফট 2 এর জন্য:

import Foundation
let fullName : String = "First Last";
let fullNameArr : [String] = fullName.componentsSeparatedByString(" ")

// And then to access the individual words:

var firstName : String = fullNameArr[0]
var lastName : String = fullNameArr[1]

সুইফ্ট 3 এর জন্য:

import Foundation

let fullName : String = "First Last"
let fullNameArr : [String] = fullName.components(separatedBy: " ")

// And then to access the individual words:

var firstName : String = fullNameArr[0]
var lastName : String = fullNameArr[1]

এটি কোথাও নথিভুক্ত, মরি? আমি যদি একটি একক চরিত্র ছাড়া অন্য কিছুতে বিভক্ত হওয়া প্রয়োজন?
NRitH

10
@ এনআরটিএইচ বিবেচনা করুন .componentsSeparatedByCharactersInSet(.whitespaceAndNewlineCharacterSet())
rmp251

@ ক্র্যাশলোট দুটি ফাংশন রয়েছে: componentsSeparatedByStringএবংcomponentsSeparatedByCharactersInSet
আরএমপি 251

131

সুইফট দেব। 4.0 (মে 24, 2017)

splitসুইফট 4 ( বিটা ) এ একটি নতুন ফাংশন ।

import Foundation
let sayHello = "Hello Swift 4 2017";
let result = sayHello.split(separator: " ")
print(result)

আউটপুট:

["Hello", "Swift", "4", "2017"]

অ্যাক্সেস মানসমূহ:

print(result[0]) // Hello
print(result[1]) // Swift
print(result[2]) // 4
print(result[3]) // 2017

এক্সকোড 8.1 / সুইফ্ট 3.0.0

অ্যারের সাথে একাধিক ডিলিমিটারগুলি এখানে।

import Foundation
let mathString: String = "12-37*2/5"
let numbers = mathString.components(separatedBy: ["-", "*", "/"])
print(numbers)

আউটপুট:

["12", "37", "2", "5"]

8
যোগ করার জন্য নিশ্চিত করুন import Foundation#SavedYouFiveMinutes বর্গ আপনি এই ব্যবহার করছেন করতে।
আদ্রিয়ান

4
মনোযোগ (সুইফট 4): আপনার যদি স্ট্রিং থাকে let a="a,,b,c"এবং আপনি ব্যবহার করেন তবে a.split(separator: ",")আপনি ডিফল্টর মতো অ্যারে পাবেন ["a", "b", c"]। এটি omittingEmptySubsequences: falseডিফল্টরূপে সত্য ব্যবহার করে পরিবর্তন করা যেতে পারে ।
ওডারওয়াট

2
সুইফট 4+ এ কোনও বহু-চরিত্র বিভাজন?
pkamb

57

4 বা তারপরে সুইফট করুন

আপনার যদি কেবল কোনও ব্যক্তির নাম সঠিকভাবে ফর্ম্যাট করতে হয় তবে আপনি পার্সননামকোম্পোনস ফরমেটার ব্যবহার করতে পারেন ।

পার্সননামকম্পোনেন্টস ফরমেটার ক্লাসটি কোনও ব্যক্তির নামের উপাদানগুলির স্থানীয়করণের উপস্থাপনা সরবরাহ করে, যেমন একটি পার্সননামকোম্পোনজস অবজেক্ট দ্বারা প্রতিনিধিত্ব করা হয়। ব্যবহারকারীর কাছে ব্যক্তির নাম তথ্য প্রদর্শন করার সময় স্থানীয়করণ তৈরি করতে এই শ্রেণিটি ব্যবহার করুন।


// iOS (9.0 and later), macOS (10.11 and later), tvOS (9.0 and later), watchOS (2.0 and later)
let nameFormatter = PersonNameComponentsFormatter()

let name =  "Mr. Steven Paul Jobs Jr."
// personNameComponents requires iOS (10.0 and later)
if let nameComps  = nameFormatter.personNameComponents(from: name) {
    nameComps.namePrefix   // Mr.
    nameComps.givenName    // Steven
    nameComps.middleName   // Paul
    nameComps.familyName   // Jobs
    nameComps.nameSuffix   // Jr.

    // It can also be configured to format your names
    // Default (same as medium), short, long or abbreviated

    nameFormatter.style = .default
    nameFormatter.string(from: nameComps)   // "Steven Jobs"

    nameFormatter.style = .short
    nameFormatter.string(from: nameComps)   // "Steven"

    nameFormatter.style = .long
    nameFormatter.string(from: nameComps)   // "Mr. Steven Paul Jobs jr."

    nameFormatter.style = .abbreviated
    nameFormatter.string(from: nameComps)   // SJ

    // It can also be use to return an attributed string using annotatedString method
    nameFormatter.style = .long
    nameFormatter.annotatedString(from: nameComps)   // "Mr. Steven Paul Jobs jr."
}

এখানে চিত্র বর্ণনা লিখুন

সম্পাদনা / আপডেট:

সুইফট 5 বা তারপরে

অক্ষরযুক্ত অক্ষর দ্বারা কেবল একটি স্ট্রিং বিভক্ত করার জন্য আমরা নতুন অক্ষর বৈশিষ্ট্যটি ব্যবহার করতে পারি isLetter:

let fullName = "First Last"

let components = fullName.split{ !$0.isLetter }
print(components)  // "["First", "Last"]\n"

1
@ ড্যারেলল আপনাকে কেবল সাবস্ট্রিংগুলি মানচিত্রের প্রয়োজনfullName.split { $0.isWhitespace }.map(String.init)
লিও ডাবাস

2
আমি সেই নতুন এপিআই পছন্দ করি তবে মনে রাখবেন এটি সাবস্ট্রিংগুলি ফেরত দেয়। আমার স্ট্রিংসের প্রয়োজন ছিল (এবং সাধারণভাবে হোয়াইটস্পেসে বিভক্ত হতে চেয়েছিল) তাই আমি এটি করেছি: let words = line.split{ $0.isWhitespace }.map{ String($0)} আপনার সংস্করণটির জন্য @ লিওডাবাসকে ধন্যবাদ (আমার মূল মন্তব্যে কোডটি ছিল না)। এছাড়াও আমি সুইফট 5 সংস্করণটি উত্তরের শীর্ষে স্থানান্তরিত করার পরামর্শ দিচ্ছি।
ডারেল রুট

53

ডাব্লুএমআইওসের উত্তরের বিকল্প হিসাবে componentsSeparatedByCharactersInSetআপনি আরও বেশি পৃথককারী (ফাঁকা জায়গা, কমা, ইত্যাদি) ব্যবহার করতে পারেন যা আপনার পক্ষে কার্যকর হতে পারে।

আপনার নির্দিষ্ট ইনপুট সহ:

let separators = NSCharacterSet(charactersInString: " ")
var fullName: String = "First Last";
var words = fullName.componentsSeparatedByCharactersInSet(separators)

// words contains ["First", "Last"]

একাধিক বিভাজক ব্যবহার:

let separators = NSCharacterSet(charactersInString: " ,")
var fullName: String = "Last, First Middle";
var words = fullName.componentsSeparatedByCharactersInSet(separators)

// words contains ["Last", "First", "Middle"]

2
আমার দৃষ্টিতে সবচেয়ে দরকারী উত্তর, যেহেতু আপনার সাথে স্ট্রিং বিচ্ছেদ করার অনুমতি চাইতে পারেন ,বা ;বা অন্য কোন বিভাজক
ক্রিস


34

শ্বেত স্পেস ইস্যু

সাধারণত, লোকেরা বারবার এই সমস্যাটি এবং খারাপ সমাধানগুলিকে পুনরায় উদ্ভাবন করে। এটা কি জায়গা? "" এবং "\ n", "\ t" বা এমন কিছু ইউনিকোড শ্বেতস্থান চরিত্র যা আপনি কখনও দেখেন নি, অল্প অল্প অংশেও কারণ এটি অদৃশ্য। আপনি যখন দূরে পেতে পারেন

একটি দুর্বল সমাধান

import Foundation
let pieces = "Mary had little lamb".componentsSeparatedByString(" ")

আপনার যদি কখনও বাস্তবতার উপর আপনার কড়া নাড়তে হয় তবে ডাব্লুডাব্লুডিসি ভিডিওতে স্ট্রিং বা খেজুর দেখুন। সংক্ষেপে, অ্যাপলকে এই ধরণের জাগতিক কাজটি সমাধান করার অনুমতি দেওয়া প্রায় সবসময়ই ভাল।

দৃust় সমাধান: এনএসচার্যাকারসেট ব্যবহার করুন

এটি সঠিকভাবে করার উপায়, আইএমএইচও, NSCharacterSetযেহেতু আগেই বলা হয়েছে যে আপনার সাদা স্থানটি আপনার প্রত্যাশা মতো নাও হতে পারে এবং অ্যাপল একটি সাদা স্থানের অক্ষর সেট সরবরাহ করেছে use বিভিন্ন সরবরাহিত অক্ষর সেটগুলি অন্বেষণ করতে অ্যাপলের এনএসচার্যাকসেটসেট বিকাশকারী ডকুমেন্টেশন পরীক্ষা করে দেখুন এবং তারপরে, কেবল তখনই আপনার প্রয়োজন অনুসারে ফিট না করে একটি নতুন চরিত্র সেট বা বর্ধন করুন

NSCharacterSet সাদা স্থান

ইউনিকোড জেনারেল ক্যাটাগরি জেডস এবং বর্ণচিহ্ন সংগ্রহ (ইউ + 0009) এর মধ্যে অক্ষরগুলি সমন্বিত একটি অক্ষর সেট প্রদান করে।

let longerString: String = "This is a test of the character set splitting system"
let components = longerString.components(separatedBy: .whitespaces)
print(components)

2
একমত। "" দ্বারা বিভক্ত উত্তরগুলি দেখার পরে আমার কাছে প্রথম যেটি ঘটেছিল তা হ'ল: যদি ইনপুট পাঠ্যটিতে একটানা একাধিক স্পেস থাকে তবে কি হবে? এতে যদি ট্যাব থাকে? পূর্ণ-প্রস্থ (সিজেকে) স্থান? ইত্যাদি
নিকোলাস মিয়ারি

31

ইন সুইফট 4.2 এবং Xcode 10

//This is your str
let str = "This is my String" //Here replace with your string

বিকল্প 1

let items = str.components(separatedBy: " ")//Here replase space with your value and the result is Array.
//Direct single line of code
//let items = "This is my String".components(separatedBy: " ")
let str1 = items[0]
let str2 = items[1]
let str3 = items[2]
let str4 = items[3]
//OutPut
print(items.count)
print(str1)
print(str2)
print(str3)
print(str4)
print(items.first!)
print(items.last!)

বিকল্প 2

let items = str.split(separator: " ")
let str1 = String(items.first!)
let str2 = String(items.last!)
//Output
print(items.count)
print(items)
print(str1)
print(str2)

বিকল্প 3

let arr = str.split {$0 == " "}
print(arr)

বিকল্প 4

let line = "BLANCHE:   I don't want realism. I want magic!"
print(line.split(separator: " "))
// Prints "["BLANCHE:", "I", "don\'t", "want", "realism.", "I", "want", "magic!"]"

অ্যাপল ডকুমেন্টেশন দ্বারা ....

let line = "BLANCHE:   I don't want realism. I want magic!"
print(line.split(separator: " "))
// Prints "["BLANCHE:", "I", "don\'t", "want", "realism.", "I", "want", "magic!"]"

print(line.split(separator: " ", maxSplits: 1))//This can split your string into 2 parts
// Prints "["BLANCHE:", "  I don\'t want realism. I want magic!"]"

print(line.split(separator: " ", maxSplits: 2))//This can split your string into 3 parts

print(line.split(separator: " ", omittingEmptySubsequences: false))//array contains empty strings where spaces were repeated.
// Prints "["BLANCHE:", "", "", "I", "don\'t", "want", "realism.", "I", "want", "magic!"]"

print(line.split(separator: " ", omittingEmptySubsequences: true))//array not contains empty strings where spaces were repeated.
print(line.split(separator: " ", maxSplits: 4, omittingEmptySubsequences: false))
print(line.split(separator: " ", maxSplits: 3, omittingEmptySubsequences: true))

23

সুইফট 4 অক্ষরগুলি বিভক্ত করা আরও সহজ করে তোলে, কেবল স্ট্রিংয়ের জন্য নতুন বিভাজন ফাংশনটি ব্যবহার করুন।

উদাহরণ: let s = "hi, hello" let a = s.split(separator: ",") print(a)

এখন আপনি 'হাই' এবং 'হ্যালো' দিয়ে একটি অ্যারে পেয়েছেন।


দ্রষ্টব্য যে এটি স্ট্রিংয়ের একটি অ্যারে প্রদান করে না, তবে সাবস্ট্রিংয়ের অ্যারে ব্যবহার করবে যা অবাস্তব।
লিরিক

19

সুইফট 5 এবং সহজতম উপায়ের জন্য আপডেট

let paragraph = "Bob hit a ball, the hit BALL flew far after it was hit. Hello! Hie, How r u?"

let words = paragraph.components(separatedBy: [",", " ", "!",".","?"])

এই মুদ্রণ,

["বব", "হিট", "ক", "বল", "", "হিট", "বল", "উড়েছে", "দূরে", "পরে", "এটি", "ছিল "," হিট "," "," হ্যালো "," "," হাই "," "," কেমন "," আর "," ইউ "," "]

তবে, আপনি যদি খালি স্ট্রিংটি ফিল্টার করতে চান তবে

let words = paragraph.components(separatedBy: [",", " ", "!",".","?"]).filter({!$0.isEmpty})

আউটপুট,

["বব", "হিট", "ক", "বল", "দি", "হিট", "বল", "উড়েছে", "দূরে", "পরে", "এটি", "ছিল", " হিট "," হ্যালো "," হাই "," কেমন "," আর "," আপনি "]

তবে নিশ্চিত করুন, ফাউন্ডেশন আমদানি করা হয়


17

সুইফট 3

let line = "AAA    BBB\t CCC"
let fields = line.components(separatedBy: .whitespaces).filter {!$0.isEmpty}
  • তিনটি স্ট্রিং AAA, BBBএবং প্রদান করেCCC
  • খালি ক্ষেত্রগুলি ফিল্টার করে
  • একাধিক স্পেস এবং ট্যাবুলেশন অক্ষর পরিচালনা করে
  • আপনি যদি নতুন লাইনগুলি পরিচালনা করতে চান তবে এর .whitespacesসাথে প্রতিস্থাপন করুন.whitespacesAndNewlines


13

এক্সকোড 8.0 / সুইফট 3

let fullName = "First Last"
var fullNameArr = fullName.components(separatedBy: " ")

var firstname = fullNameArr[0] // First
var lastname = fullNameArr[1] // Last

দীর্ঘ পথ:

var fullName: String = "First Last"
fullName += " " // this will help to see the last word

var newElement = "" //Empty String
var fullNameArr = [String]() //Empty Array

for Character in fullName.characters {
    if Character == " " {
        fullNameArr.append(newElement)
        newElement = ""
    } else {
        newElement += "\(Character)"
    }
}


var firsName = fullNameArr[0] // First
var lastName = fullNameArr[1] // Last

9

আমার একটি দৃশ্যাবলী ছিল যেখানে আমি বিভাজন করতে চাই এমন স্ট্রিংয়ে একাধিক নিয়ন্ত্রণ অক্ষর উপস্থিত থাকতে পারে। এগুলির একটি অ্যারে বজায় রাখার পরিবর্তে, আমি কেবল অ্যাপলটিকে সেই অংশটি পরিচালনা করতে দিয়েছি।

নিম্নলিখিত আইওএস 10 এ সুইফট 3.0.1 এর সাথে কাজ করে:

let myArray = myString.components(separatedBy: .controlCharacters)

8

আমি একটি আকর্ষণীয় কেস পেয়েছি, যে

পদ্ধতি 1

var data:[String] = split( featureData ) { $0 == "\u{003B}" }

সার্ভার থেকে লোড হওয়া ডেটা থেকে কিছু চিহ্নকে বিভক্ত করতে আমি যখন এই আদেশটি ব্যবহার করেছি তখন সিমুলেটারে পরীক্ষা করার সময় এটি বিভক্ত হতে পারে এবং পরীক্ষার ডিভাইসের সাথে সিঙ্ক করে, তবে এটি প্রকাশিত অ্যাপে এবং অ্যাডহকগুলিতে বিভক্ত হবে না

এই ত্রুটিটি সনাক্ত করতে আমার অনেক সময় লাগে, এটি কিছু সুইফট সংস্করণ বা কোনও আইওএস সংস্করণ বা কোনওটি থেকে অভিশপ্ত হতে পারে

এটি এইচটিএমএল কোড সম্পর্কেও নয়, যেহেতু আমি স্ট্রিংবাইরোমিংপিংসেন্ট এনকোডিংয়ের চেষ্টা করি এবং এটি এখনও কাজ করে না

সংযোজন

সুইফট ২.০ এ এই পদ্ধতিতে পরিবর্তন করা হয়েছে

var data:[String] = featureData.split {$0 == "\u{003B}"}

পদ্ধতি 2

var data:[String] = featureData.componentsSeparatedByString("\u{003B}")

যখন আমি এই কমান্ডটি ব্যবহার করেছি, এটি সার্ভার থেকে সঠিকভাবে লোড হওয়া একই ডেটা বিভক্ত করতে পারে


উপসংহার, আমি সত্যিই পদ্ধতি 2 ব্যবহার করার পরামর্শ দিই

string.componentsSeparatedByString("")

1
আমি বলব এটি "উত্তর নয়" অবস্থার নিকটে, এটি বেশিরভাগ ক্ষেত্রে বিদ্যমান উত্তরের মন্তব্য। তবে এটি গুরুত্বপূর্ণ কিছু নির্দেশ করছে।
রিক্সার 19

8

এই উত্তরগুলির বেশিরভাগই অনুমান করে যে ইনপুটটিতে একটি স্থান রয়েছে - সাদা স্থান নয় এবং এতে একটি একক স্থান রয়েছে। আপনি যদি এই ধারণাটি নিরাপদে করতে পারেন তবে স্বীকৃত উত্তরটি (বেনেট থেকে) বেশ মার্জিত এবং আমি যখন পাব তখন যে পদ্ধতিটি আমি নিয়ে যাব।

আমরা যখন এই অনুমান করতে পারি না, তখন আরও দৃ solution় সমাধানের জন্য নিম্নলিখিত বিভাজনগুলি আবরণ করা দরকার যা বেশিরভাগ উত্তর এখানে বিবেচনা করে না:

  • পুনরাবৃত্ত অক্ষরগুলি সহ ট্যাব / নিউলাইন / স্পেস (সাদা স্থান) ace
  • নেতৃস্থানীয় / পিছনে সাদা জায়গা
  • অ্যাপল / লিনাক্স ( \n) এবং উইন্ডোজ ( \r\n) নতুন লাইন অক্ষর

এই কেসগুলি কভার করার জন্য এই দ্রবণটি সমস্ত সাদা স্থানকে (পুনরাবৃত্ত এবং উইন্ডোজ নিউলাইন অক্ষর সহ) একক জায়গায় রূপান্তর করতে ট্রিমস ব্যবহার করে, এবং তার পরে একক স্পেসে বিভক্ত হয়ে যায়:

সুইফট 3:

let searchInput = "  First \r\n \n \t\t\tMiddle    Last "
let searchTerms = searchInput 
    .replacingOccurrences(
        of: "\\s+",
        with: " ",
        options: .regularExpression
    )
    .trimmingCharacters(in: .whitespaces)
    .components(separatedBy: " ")

// searchTerms == ["First", "Middle", "Last"]

6

বা ক্লোজার ছাড়া আপনি সুইফট 2 এ কেবল এটি করতে পারেন:

let fullName = "First Last"
let fullNameArr = fullName.characters.split(" ")
let firstName = String(fullNameArr[0])

6

সুইফট 4-এ একটি স্ট্রিংকে একটি অ্যারেতে বিভক্ত করার পদক্ষেপ।

  1. স্ট্রিং বরাদ্দ করুন
  2. @ বিভাজনের উপর ভিত্তি করে।

দ্রষ্টব্য: ভেরিয়েবলনেম.কম অংশগুলি (বিচ্ছিন্নভাবে: "বিভক্ত কীওয়ার্ড")

let fullName: String = "First Last @ triggerd event of the session by session storage @ it can be divided by the event of the trigger."
let fullNameArr = fullName.components(separatedBy: "@")
print("split", fullNameArr)

4

সুইফট 4

let string = "loremipsum.dolorsant.amet:"

let result = string.components(separatedBy: ".")

print(result[0])
print(result[1])
print(result[2])
print("total: \(result.count)")

আউটপুট

loremipsum
dolorsant
amet:
total: 3

3

ধরা যাক আপনার "হ্যালো ওয়ার্ল্ড" নামে একটি ভেরিয়েবল রয়েছে এবং আপনি যদি এটিকে বিভক্ত করতে এবং এটি দুটি পৃথক ভেরিয়েবলের মধ্যে সঞ্চয় করতে চান তবে আপনি এটির মতো ব্যবহার করতে পারেন:

var fullText = "Hello World"
let firstWord = fullText.text?.components(separatedBy: " ").first
let lastWord = fullText.text?.components(separatedBy: " ").last


2

সুইফট ২.২ ত্রুটি পরিচালনা ও তাত্পর্যপূর্ণ স্ট্রিং যুক্ত হয়েছে:

func setFullName(fullName: String) {
    var fullNameComponents = fullName.componentsSeparatedByString(" ")

    self.fname = fullNameComponents.count > 0 ? fullNameComponents[0]: ""
    self.sname = fullNameComponents.count > 1 ? fullNameComponents[1]: ""

    self.fname = self.fname!.capitalizedString
    self.sname = self.sname!.capitalizedString
}

2

স্ট্রিং হ্যান্ডলিং সুইফটে এখনও একটি চ্যালেঞ্জ এবং এটি উল্লেখযোগ্যভাবে পরিবর্তন করে চলেছে, যেমন আপনি অন্যান্য উত্তর থেকে দেখতে পারেন। আশা করি বিষয়গুলি স্থির হয়ে যায় এবং এটি সহজ হয়ে যায়। একাধিক বিভাজক অক্ষরের সাথে সুইফটের বর্তমান 3.0 সংস্করণটি এটি করার উপায়।

সুইফট 3:

let chars = CharacterSet(charactersIn: ".,; -")
let split = phrase.components(separatedBy: chars)

// Or if the enums do what you want, these are preferred. 
let chars2 = CharacterSet.alphaNumerics // .whitespaces, .punctuation, .capitalizedLetters etc
let split2 = phrase.components(separatedBy: chars2)

2

আমি আলগা বিভাজনের সন্ধান করছিলাম , যেমন পিএইচপি'রexplode যেখানে খালি সিকোয়েন্সগুলি ফলাফল অ্যারে অন্তর্ভুক্ত করা হয়েছে, এটি আমার পক্ষে কাজ করেছে:

"First ".split(separator: " ", maxSplits: 1, omittingEmptySubsequences: false)

আউটপুট:

["First", ""]

2

এটি সরাসরি বিভক্ত অংশগুলির একটি অ্যারে দেয়

var fullNameArr = fullName.components(separatedBy:" ")

তাহলে আপনি এটি ব্যবহার করতে পারেন,

var firstName: String = fullNameArr[0]
var lastName: String? = fullnameArr[1]

2

কেবলমাত্র splitসঠিক উত্তর, এখানে 2 টিরও বেশি স্পেসের পার্থক্য রয়েছে।

var temp = "Hello world     ni hao"
let arr  = temp.components(separatedBy: .whitespacesAndNewlines)
// ["Hello", "world", "", "", "", "", "ni", "hao"]
let arr2 = temp.components(separatedBy: " ")
// ["Hello", "world", "", "", "", "", "ni", "hao"]
let arr3 = temp.split(whereSeparator: {$0 == " "})
// ["Hello", "world", "ni", "hao"]


1

সুইফট 2, এক্সকোড 7.1 এর জন্য:

let complete_string:String = "Hello world"
let string_arr =  complete_string.characters.split {$0 == " "}.map(String.init)
let hello:String = string_arr[0]
let world:String = string_arr[1]

1

এখানে আমি এখনই তৈরি করেছি একটি অ্যালগরিদম, যা অ্যারে থেকে যে Stringকোনও একটি দ্বারা বিভক্ত হবে Characterএবং যদি বিভাজনযুক্ত অক্ষরগুলির সাথে সাবস্ট্রিংগুলি রাখার কোনও ইচ্ছা থাকে তবে এটি swallowপ্যারামিটার সেট করতে পারে true

এক্সকোড 7.3 - সুইফট 2.2:

extension String {

    func splitBy(characters: [Character], swallow: Bool = false) -> [String] {

        var substring = ""
        var array = [String]()
        var index = 0

        for character in self.characters {

            if let lastCharacter = substring.characters.last {

                // swallow same characters
                if lastCharacter == character {

                    substring.append(character)

                } else {

                    var shouldSplit = false

                    // check if we need to split already
                    for splitCharacter in characters {
                        // slit if the last character is from split characters or the current one
                        if character == splitCharacter || lastCharacter == splitCharacter {

                            shouldSplit = true
                            break
                        }
                    }

                    if shouldSplit {

                        array.append(substring)
                        substring = String(character)

                    } else /* swallow characters that do not equal any of the split characters */ {

                        substring.append(character)
                    }
                }
            } else /* should be the first iteration */ {

                substring.append(character)
            }

            index += 1

            // add last substring to the array
            if index == self.characters.count {

                array.append(substring)
            }
        }

        return array.filter {

            if swallow {

                return true

            } else {

                for splitCharacter in characters {

                    if $0.characters.contains(splitCharacter) {

                        return false
                    }
                }
                return true
            }
        }
    }
}

উদাহরণ:

"test text".splitBy([" "]) // ["test", "text"]
"test++text--".splitBy(["+", "-"], swallow: true) // ["test", "++" "text", "--"]
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.