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

时间:2018-01-08 23:05:50

标签: macos swift4 swift-playground

我想从一个字符串中剪切几个子字符串,它们总是在两个空格之间,以便进一步使用它们。但最后我得到一个额外的标志("")...... 我究竟做错了什么?谁可以帮忙?

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)
}

我想要的:&#34; 123045&#34;和&#34; 7890&#34;和&#34; 842&#34;和&#34; abcde&#34;和&#34; fghij&#34; ((对不起,这个问题,但我真的是Swift的初学者))

2 个答案:

答案 0 :(得分:2)

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)

您可以在名为&#34; textArr&#34;的数组中使用此代码获取子字符串。

答案 1 :(得分:0)

按字面意思回答你的问题:

  • 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

更好的方式