// 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 convufgured 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."
}
855
希望这是有帮助的
Swift 4: Split a String into an array. Step 1: assign string. step 2: based on @ spliting. Note: variableName.components(separatedBy: "split keyword")
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)
let myArray = myString.components(separatedBy: .controlCharacters)
1
最简单的方法是使用componentsSeparatedBy:
For Swift 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]
For Swift 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]
46
或者没有闭包你可以在Swift 2中做到这一点:
let fullName = "First Last"
let fullNameArr = fullName.characters.split(" ")
let firstName = String(fullNameArr[0])
13
var fullName = "James Keagan Michael"
let first = fullName.components(separatedBy: " ").first?.isEmpty == false ? fullName.components(separatedBy: " ").first! : "John"
let last = fullName.components(separatedBy: " ").last?.isEmpty == false && fullName.components(separatedBy: " ").last != fullName.components(separatedBy: " ").first ? fullName.components(separatedBy: " ").last! : "Doe"
禁止使用相同的姓氏和名字
如果全名无效,请使用占位符值"John Doe"
0
对于swift 2,XCode 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]
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"]
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)
1
Swift Dev. 4.0 (May 24, 2017)
Swift 4中的新函数 split ( Beta ) .
import Foundation
let sayHello = "Hello Swift 4 2017";
let result = sayHello.split(separator: " ")
print(result)
返回包含Unicode General Category Zs和CHARACTER TABULATION(U 0009)中字符的字符集 .
let longerString: String = "This is a test of the character set splitting system"
let components = longerString.components(separatedBy: .whitespaces)
print(components)
0
只需在 fullName 上调用 componentsSeparatedByString 方法
import Foundation
var fullName: String = "First Last"
let fullNameArr = fullName.componentsSeparatedByString(" ")
var firstName: String = fullNameArr[0]
var lastName: String = fullNameArr[1]
Update for Swift 3+
import Foundation
let fullName = "First Last"
let fullNameArr = fullName.components(separatedBy: " ")
let name = fullNameArr[0]
let surname = fullNameArr[1]
2
Swift 4, Xcode 10 and iOS 12 Update 100% working
let fullName = "First Last"
let fullNameArr = fullName.components(separatedBy: " ")
let firstName = fullNameArr[0] //First
let lastName = fullnameArr[1] //Last
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
1
let str = "one two"
let strSplit = str.characters.split(" ").map(String.init) // returns ["one", "two"]
Xcode 7.2 (7C68)
1
Xcode 8.0 / Swift 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
3
这已经在Beta 5中再次改变了.Weee!它现在是CollectionType上的一个方法
旧:
var fullName = "First Last"
var fullNameArr = split(fullName) {$0 == " "}
新:
var fullName = "First Last"
var fullNameArr = fullName.split {$0 == " "}
let string = "loremipsum.dolorsant.amet:"
let result = string.components(separatedBy: ".")
print(result[0])
print(result[1])
print(result[2])
print("total: \(result.count)")
Output
loremipsum
dolorsant
amet:
total: 3
7
在Swift 4.2和Xcode 10中
//This is your str
let str = "This is my String" //Here replace with your string
Option 1
let items = str.components(separatedBy: " ")//Here replase space with your value and result is Array.
//Direct 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!)
Option 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)
let line = "BLANCHE: I don't want realism. I want magic!"
print(line.split(separator: " "))
print(line.split(separator: " ", maxSplits: 1))//This can split your string into 2 parts
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.
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))
20
Swift 4
let words = "these words will be elements in an array".components(separatedBy: " ")
1
这是我刚刚构建的算法,它将从数组中分割 String 任何 Character ,如果有任何希望保留带有分割字符的子串,可以将 swallow 参数设置为 true .
Xcode 7.3 - Swift 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
}
}
}
}
30 回答
Swift 3
返回三个字符串
AAA
,BBB
和CCC
过滤掉空白字段
处理多个空格和制表字符
如果要处理新行,则将
.whitespaces
替换为.whitespacesAndNewlines
我发现了一个有趣的案例
method 1
当我使用此命令拆分某些符号 from the data that loaded from server 时,它可以在模拟器中进行测试时拆分并与测试设备同步,但它不会在发布应用程序和Ad Hoc中拆分
我花了很多时间来跟踪这个错误,它可能会受到一些Swift版本或某些iOS版本的诅咒,或者两者兼而有之
它也不是关于HTML代码,因为我尝试使用stringByRemovingPercentEncoding并且它仍然不起作用
addition 10/10/2015
在Swift 2.0中,此方法已更改为
method 2
当我使用此命令时, it can split the same data that load from server correctly
Conclusion, I really suggest to use the method 2
As per Swift 2.2
您只需编写2行代码即可获得拆分字符串 .
请享用 . :)
假设您有一个名为“Hello World”的变量,如果您想将其拆分并将其存储到两个不同的变量中,您可以像这样使用:
Xcode 9 Swift 4 或 Xcode 8.2.1 • Swift 3.0.2
如果您只需要正确格式化人名,则可以使用PersonNameComponentsFormatter .
希望这是有帮助的
Swift 4: Split a String into an array. Step 1: assign string. step 2: based on @ spliting. Note: variableName.components(separatedBy: "split keyword")
我还没有找到能够处理具有3个或更多组件的名称并支持旧iOS版本的解决方案 .
通过测试用例:
Swift 4使得分割字符变得更加容易,只需使用字符串的新分割功能 .
示例:
let s = "hi, hello" let a = s.split(separator: ",") print(a)
现在你有一个'hi'和'hello'的数组 .
我有一个场景,我想要拆分的字符串中可以存在多个控制字符 . 我没有维护这些数组,而是让Apple处理这一部分 .
以下适用于iOS 10上的Swift 3.0.1:
最简单的方法是使用componentsSeparatedBy:
For Swift 2:
For Swift 3:
或者没有闭包你可以在Swift 2中做到这一点:
禁止使用相同的姓氏和名字
如果全名无效,请使用占位符值"John Doe"
对于swift 2,XCode 7.1:
作为WMios答案的替代方案,您还可以使用
componentsSeparatedByCharactersInSet
,如果您有更多的分隔符(空格,逗号等),这可能很方便 .根据您的具体输入:
使用多个分隔符:
字符串处理在Swift中仍然是一个挑战,它会不断变化,正如您可以从其他答案中看到的那样 . 希望事情能够安定下来并且变得更加简单 . 这是使用当前3.0版本的Swift和多个分隔符进行此操作的方法 .
Swift 3:
Swift Dev. 4.0 (May 24, 2017)
Swift 4中的新函数
split
( Beta ) .输出:
访问值:
Xcode 8.1 / Swift 3.0.1
这是多个分隔符与数组的方式 .
输出:
这些答案中的大多数都假设输入包含空格 - 而不是 white 空格,并且在该空间处有一个空格 . 如果你可以安全地做出这个假设,那么接受的答案(来自bennett)是非常优雅的,也是我能用的方法 .
当我们无法做出这样的假设时,一个更强大的解决方案需要涵盖以下大多数答案不考虑的问题:
tabs / newlines / spaces(空格),包括 recurring 个字符
前导/尾随空格
Apple / Linux(
\n
) and Windows(\r\n
)换行符为了涵盖这些情况,此解决方案使用正则表达式将所有空格(包括重复和Windows换行符)转换为单个空格,修剪,然后按单个空格拆分:
Swift 3:
我正在寻找松散的分裂,例如PHP的
explode
,其中空序列包含在结果数组中,这对我有用:Output:
空白问题
一般来说,人们一遍又一遍地重塑这个问题和糟糕的解决方案 . 这是一个空间吗? “”和“你”之前的“\ n”,“\ t”或一些unicode空白字符有什么关系,这在很大程度上是因为它是看不见的 . 虽然你可以逃脱
一个弱的解决方案
如果您需要动摇现实,请观看有关字符串或日期的WWDC视频 . 简而言之,几乎总是更好允许Apple解决这种平凡的任务 .
强大的解决方案:使用NSCharacterSet
正确地执行此操作的方法,恕我直言,是使用
NSCharacterSet
,因为如前所述,您的空白可能不是您所期望的,Apple提供了空白字符集 . 要探索各种提供的字符集,请查看Apple的NSCharacterSet developer documentation,然后,只有在不符合您需要的情况下,才会扩充或构造新的字符集 .NSCharacterSet空格
只需在
fullName
上调用componentsSeparatedByString
方法Update for Swift 3+
Swift 4, Xcode 10 and iOS 12 Update 100% working
有关详细信息,请参阅Apple's documentation here .
Swift方式是使用全局
split
函数,如下所示:与 Swift 2
在Swift 2中,由于引入了内部的CharacterView类型,split的使用变得有点复杂 . 这意味着String不再采用SequenceType或CollectionType协议,您必须使用
.characters
属性来访问String实例的CharacterView类型表示 . (注意:CharacterView确实采用SequenceType和CollectionType协议) .Xcode 7.2 (7C68)
Xcode 8.0 / Swift 3
很长的路要走:
这已经在Beta 5中再次改变了.Weee!它现在是CollectionType上的一个方法
旧:
新:
Apples Release Notes
Swift 2.2 Error Handling & capitalizedString Added :
Swift 4
Output
在Swift 4.2和Xcode 10中
Option 1
Option 2
Option 3
Option 4
By Apple Documentation....
Swift 4
这是我刚刚构建的算法,它将从数组中分割
String
任何Character
,如果有任何希望保留带有分割字符的子串,可以将swallow
参数设置为true
.Xcode 7.3 - Swift 2.2:
例: