在字符串的两个空白字符(空格)之间剪切子字符串

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 中出现空白或空格?

将字符串格式化为仅在 python 中的单词之间有 n 个空格

Python 正则表达式匹配两个字符之间的字符

c#处理空白字符

修剪空白而不影响字符串