在字符串的两个空白字符(空格)之间剪切子字符串
Posted
技术标签:
【中文标题】在字符串的两个空白字符(空格)之间剪切子字符串【英文标题】:to cut a substring between two blank characters (spaces) of a string 【发布时间】:2018-01-08 23:05:50 【问题描述】:我想从一个字符串中删除几个子字符串,它们总是在两个空格之间,以便进一步使用它们。但最后我得到一个额外的符号(“”)...... 我究竟做错了什么?谁能帮忙?
let text = "123045 7890 842 abcde fghij"
var index4Blank = text.index(of: " ") // first 'blank'
index4Blank?.encodedOffset
// Find NEXT/last occurance of " "
if let rangeOfBlank = text.range(of: " ", options: .backwards)
// Get the characters between first 'blank' and next 'blank'
let suffix = text[index4Blank!..<rangeOfBlank.upperBound] // "7890 "
print(suffix)
我想要什么:“123045”和“7890”和“842”和“abcde”和“fghij” ((对不起这个问题,但我真的是 Swift 的初学者))
【问题讨论】:
【参考方案1】:let text = "123045 7890 842 abcde fghij"
var textArr = text.components(separatedBy: " ") // For swift 3+
var textArr = text.split(separator: " ") // For swift 4
print(textArr)
您可以使用此代码在名为“textArr”的数组中获取子字符串。
【讨论】:
感谢您提供此代码 sn-p,它可能会提供一些有限的即时帮助。 proper explanation would greatly improve its long-term value 通过展示为什么这是一个很好的解决问题的方法,并将使其对未来有其他类似问题的读者更有用。请edit您的回答添加一些解释,包括您所做的假设。 谢谢 - 但后来我收到消息:使用未解析的标识符“拆分”。我在那里错过了什么?【参考方案2】:从字面上回答你的问题:
index(of:
——顾名思义——返回找到的字符串的第一个字符的索引,在你的情况下是123045
之后的空格字符
range(of: ... ).upperBound
返回在找到的字符串之后的字符索引,因此包含最后一个空格字符。
要使用您的代码删除前导和尾随空格,您必须使用lowerBound
作为上限,range(of:
调用upperBound
作为下限。
let text = "123045 7890 842 abcde fghij"
if let index4Blank = text.range(of: " "),
// Find NEXT/last occurance of " "
let rangeOfBlank = text.range(of: " ", options: .backwards)
// Get the characters between first 'blank' and next 'blank'
let suffix = text[index4Blank.upperBound..<rangeOfBlank.lowerBound] // "7890 "
print(suffix)
但是,通过给定的分隔符将字符串拆分为多个部分,有更好的方法,例如其他答案或here
【讨论】:
以上是关于在字符串的两个空白字符(空格)之间剪切子字符串的主要内容,如果未能解决你的问题,请参考以下文章
VBA Trim CleanString 删除空白(空格)字符
如何在 Swift 中防止 UITextField 中出现空白或空格?