ble*_*908 653 arrays string split ios swift
说我在这里有一个字符串:
var fullName: String = "First Last"
Run Code Online (Sandbox Code Playgroud)
我想在白色空间上拆分字符串,并将值分配给它们各自的变量
var fullNameArr = // something like: fullName.explode(" ")
var firstName: String = fullNameArr[0]
var lastName: String? = fullnameArr[1]
Run Code Online (Sandbox Code Playgroud)
此外,有时用户可能没有姓氏.
Che*_*Lin 973
只需打电话componentsSeparatedByString
给你fullName
import Foundation
var fullName: String = "First Last"
let fullNameArr = fullName.componentsSeparatedByString(" ")
var firstName: String = fullNameArr[0]
var lastName: String = fullNameArr[1]
Run Code Online (Sandbox Code Playgroud)
Swift 3+更新
import Foundation
let fullName = "First Last"
let fullNameArr = fullName.components(separatedBy: " ")
let name = fullNameArr[0]
let surname = fullNameArr[1]
Run Code Online (Sandbox Code Playgroud)
Eth*_*han 763
Swift方式是使用全局split
函数,如下所示:
var fullName = "First Last"
var fullNameArr = split(fullName) {$0 == " "}
var firstName: String = fullNameArr[0]
var lastName: String? = fullNameArr.count > 1 ? fullNameArr[1] : nil
Run Code Online (Sandbox Code Playgroud)
用Swift 2
在Swift 2中,由于引入了内部的CharacterView类型,split的使用变得有点复杂.这意味着String不再采用SequenceType或CollectionType协议,您必须使用该.characters
属性来访问String实例的CharacterView类型表示.(注意:CharacterView确实采用SequenceType和CollectionType协议).
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
Run Code Online (Sandbox Code Playgroud)
Wye*_*tro 174
最简单的方法是使用componentsSeparatedBy:
对于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]
Run Code Online (Sandbox Code Playgroud)
对于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]
Run Code Online (Sandbox Code Playgroud)
Lug*_*aue 119
Swift Dev.4.0(2017年5月24日)
split
Swift 4(Beta)中的新功能.
import Foundation
let sayHello = "Hello Swift 4 2017";
let result = sayHello.split(separator: " ")
print(result)
Run Code Online (Sandbox Code Playgroud)
输出:
["Hello", "Swift", "4", "2017"]
Run Code Online (Sandbox Code Playgroud)
访问值:
print(result[0]) // Hello
print(result[1]) // Swift
print(result[2]) // 4
print(result[3]) // 2017
Run Code Online (Sandbox Code Playgroud)
Xcode 8.1/Swift 3.0.1
这是多个分隔符与数组的方式.
import Foundation
let mathString: String = "12-37*2/5"
let numbers = mathString.components(separatedBy: ["-", "*", "/"])
print(numbers)
Run Code Online (Sandbox Code Playgroud)
输出:
["12", "37", "2", "5"]
Run Code Online (Sandbox Code Playgroud)
Ant*_*nio 51
作为WMios答案的替代方案,您也可以使用componentsSeparatedByCharactersInSet
,如果您有更多的分隔符(空格,逗号等),这可能很方便.
根据您的具体输入:
let separators = NSCharacterSet(charactersInString: " ")
var fullName: String = "First Last";
var words = fullName.componentsSeparatedByCharactersInSet(separators)
// words contains ["First", "Last"]
Run Code Online (Sandbox Code Playgroud)
使用多个分隔符:
let separators = NSCharacterSet(charactersInString: " ,")
var fullName: String = "Last, First Middle";
var words = fullName.componentsSeparatedByCharactersInSet(separators)
// words contains ["Last", "First", "Middle"]
Run Code Online (Sandbox Code Playgroud)
Leo*_*bus 51
Xcode 9 Swift 4或Xcode 8.2.1•Swift 3.0.2
如果您只需要正确格式化人名,则可以使用PersonNameComponentsFormatter.
PersonNameComponentsFormatter类提供人名的组件的本地化表示,由PersonNameComponents对象表示.在向用户显示人员姓名信息时,使用此类创建本地化名称.
// 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."
}
Run Code Online (Sandbox Code Playgroud)
Bob*_*bby 49
斯威夫特4
let words = "these words will be elements in an array".components(separatedBy: " ")
Run Code Online (Sandbox Code Playgroud)
Cam*_*mer 31
一般来说,人们一遍又一遍地重塑这个问题和糟糕的解决方案.这是一个空间吗?""以及"\n","\ t"或者你从未见过的一些unicode空白字符,在很大程度上是因为它是看不见的.虽然你可以逃脱
import Foundation
let pieces = "Mary had little lamb".componentsSeparatedByString(" ")
Run Code Online (Sandbox Code Playgroud)
如果您需要动摇现实,请观看有关字符串或日期的WWDC视频.简而言之,允许Apple解决这种平凡的任务几乎总是更好.
正确使用恕我直言的方法是使用,NSCharacterSet
因为如前所述,您的空白可能不是您所期望的,Apple提供了空白字符集.要浏览各种提供的字符集,请查看Apple的NSCharacterSet开发人员文档,然后,只有在它不符合您的需求时才会扩充或构造新的字符集.
返回包含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)
Run Code Online (Sandbox Code Playgroud)
iOS*_*iOS 27
在Swift 4.2和Xcode 10中
//This is your str
let str = "This is my String" //Here replace with your string
Run Code Online (Sandbox Code Playgroud)
选项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!)
Run Code Online (Sandbox Code Playgroud)
选项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)
Run Code Online (Sandbox Code Playgroud)
选项3
let arr = str.split {$0 == " "}
print(arr)
Run Code Online (Sandbox Code Playgroud)
选项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!"]"
Run Code Online (Sandbox Code Playgroud)
小智 21
Swift 4使分割字符变得更加容易,只需使用字符串的新分割功能.
例:
let s = "hi, hello"
let a = s.split(separator: ",")
print(a)
现在你有一个'hi'和'hello'的数组.
小智 17
斯威夫特3
let line = "AAA BBB\t CCC"
let fields = line.components(separatedBy: .whitespaces).filter {!$0.isEmpty}
Run Code Online (Sandbox Code Playgroud)
AAA
,BBB
和CCC
.whitespaces
为.whitespacesAndNewlines
mis*_*don 15
只有split
是正确答案,这里是 2 个以上空格的区别。
斯威夫特 5
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"]
Run Code Online (Sandbox Code Playgroud)
Xco*_*ngi 14
Swift 4,Xcode 10和iOS 12 Update 100%正常运行
let fullName = "First Last"
let fullNameArr = fullName.components(separatedBy: " ")
let firstName = fullNameArr[0] //First
let lastName = fullNameArr[1] //Last
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参阅Apple的文档.
Nik*_*kaE 13
Xcode 8.0/Swift 3
let fullName = "First Last"
var fullNameArr = fullName.components(separatedBy: " ")
var firstname = fullNameArr[0] // First
var lastname = fullNameArr[1] // Last
Run Code Online (Sandbox Code Playgroud)
很长的路要走:
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
Run Code Online (Sandbox Code Playgroud)
我有一个场景,我想要拆分的字符串中可以存在多个控制字符.我只是让苹果处理这一部分,而不是维护这些数组.
以下适用于iOS 10上的Swift 3.0.1:
let myArray = myString.components(separatedBy: .controlCharacters)
Run Code Online (Sandbox Code Playgroud)
我发现了一个有趣的案例
方法1
var data:[String] = split( featureData ) { $0 == "\u{003B}" }
Run Code Online (Sandbox Code Playgroud)
当我使用此命令从服务器加载的数据中拆分某些符号时,它可以在模拟器中进行测试时拆分并与测试设备同步,但它不会在发布应用程序和Ad Hoc中拆分
我花了很多时间来跟踪这个错误,它可能会受到一些Swift版本或某些iOS版本的诅咒
它也不是关于HTML代码,因为我尝试使用stringByRemovingPercentEncoding并且它仍然不起作用
新增10/10/2015
在Swift 2.0中,此方法已更改为
var data:[String] = featureData.split {$0 == "\u{003B}"}
Run Code Online (Sandbox Code Playgroud)
方法2
var data:[String] = featureData.componentsSeparatedByString("\u{003B}")
Run Code Online (Sandbox Code Playgroud)
当我使用此命令时,它可以拆分从服务器正确加载的相同数据
结论,我真的建议使用方法2
string.componentsSeparatedByString("")
Run Code Online (Sandbox Code Playgroud)
Swift 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: [",", " ", "!",".","?"])
Run Code Online (Sandbox Code Playgroud)
打印,
[“鲍勃”,“命中”,“一个”,“球”,“”,“该”,“命中”,“球”,“飞”,“远”,“后”,“它”,“是“,” hit“,”“,” Hello“,”“,” Hie“,”“,” How“,” r“,” u“,”“]
但是,如果您要过滤出空字符串,
let words = paragraph.components(separatedBy: [",", " ", "!",".","?"]).filter({!$0.isEmpty})
Run Code Online (Sandbox Code Playgroud)
输出,
[“鲍勃”,“命中”,“一个”,“球”,“该”,“命中”,“球”,“飞”,“远”,“后”,“它”,“过去”,“ hit”,“ Hello”,“ Hie”,“ How”,“ r”,“ u”]
但是请确保基金会是进口的
这些答案中的大多数都假设输入包含空格 - 而不是空白区域,以及单个空格.如果你可以安全地做出这个假设,那么接受的答案(来自bennett)是非常优雅的,也是我能用的方法.
当我们无法做出这样的假设时,一个更强大的解决方案需要涵盖以下大多数答案不考虑的问题:
\n
)和 Windows(\r\n
)换行符为了覆盖这些情况,此解决方案使用正则表达式将所有空格(包括重复和Windows换行符)转换为单个空格,修剪,然后按单个空格拆分:
斯威夫特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"]
Run Code Online (Sandbox Code Playgroud)
或者没有闭包你可以在Swift 2中做到这一点:
let fullName = "First Last"
let fullNameArr = fullName.characters.split(" ")
let firstName = String(fullNameArr[0])
Run Code Online (Sandbox Code Playgroud)
小智 6
在Swift 4中将字符串拆分为数组的步骤。
注意: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)
Run Code Online (Sandbox Code Playgroud)
这直接给出了一个分割部分的数组
var fullNameArr = fullName.components(separatedBy:" ")
Run Code Online (Sandbox Code Playgroud)
那么你可以像这样使用,
var firstName: String = fullNameArr[0]
var lastName: String? = fullnameArr[1]
Run Code Online (Sandbox Code Playgroud)
斯威夫特 4
let string = "loremipsum.dolorsant.amet:"
let result = string.components(separatedBy: ".")
print(result[0])
print(result[1])
print(result[2])
print("total: \(result.count)")
Run Code Online (Sandbox Code Playgroud)
输出
loremipsum
dolorsant
amet:
total: 3
Run Code Online (Sandbox Code Playgroud)
最简单的解决方案是
let fullName = "First Last"
let components = fullName.components(separatedBy: .whitespacesAndNewlines).compactMap { $0.isEmpty ? nil : $0 }
Run Code Online (Sandbox Code Playgroud)
这将处理一行不同类型(空格、制表符、换行符等)中的多个空格,并且仅返回两个元素数组,您可以更改以CharacterSet
包含更多您喜欢的字符,如果您想获得 cleaver,您可以使用 Regular表达式解码器,这使您可以编写可用于将解码字符串直接解码到您自己的实现解码协议的类/结构中的正则表达式。对于这样的事情来说有点过头了,但如果你用它作为更复杂的字符串的例子,它可能更有意义。
归档时间: |
|
查看次数: |
488117 次 |
最近记录: |