【问题标题】:Reverse every other word in string, keep punctuation Swift反转字符串中的所有其他单词,保持标点符号Swift
【发布时间】:2018-04-17 02:09:54
【问题描述】:

所以我陷入了一个我几乎也知道答案的编码挑战。而且我认为我必须使用 Swift 4 中的 subString 调用来获得 100%。我想反转字符串中的每个其他单词,但忽略或将标点符号保留在其原始位置(索引)。

var sample = "lets start. And not worry about proper sentences."

func reverseString(inputString: String) -> String {
    let oldSentence = sample.components(separatedBy: " ")
    var newSentence = ""
    for index in 0...oldSentence.count - 1 {
        let word = oldSentence[index]
        if newSentence != "" {
            newSentence += " "
        }
        if index % 2 == 1 {
            let reverseWord = String(word.reversed())
            newSentence += reverseWord
        } else {
            newSentence += word
        }
    }
    return newSentence
}

reverseString(inputString: sample)

这将是预期的输出。

"lets trats. And ton worry tuoba proper secnetnes."

注意标点没有颠倒。

【问题讨论】:

  • 那么您的预期输出是什么?

标签: string substring swift4 reverse xcode9


【解决方案1】:

您不应使用components(separatedBy: ) 将字符串拆分为单词。原因见this article。使用enumerateSubstrings 并传入适当的选项:

func reverseString(inputString: String) -> String {
    var index = 1
    var newSentence = inputString
    inputString.enumerateSubstrings(in: inputString.startIndex..., options: .byWords) { substr, range, _, stop in
        guard let substr = substr else { return }
        if index % 2 == 0 {
            newSentence = newSentence.replacingCharacters(in: range, with: String(substr.reversed()))
        }
        index += 1
    }
    return newSentence
}

print(reverseString(inputString: "lets start. And not worry about proper sentences."))
// lets trats. And ton worry tuoba proper secnetnes.

print(reverseString(inputString: "I think, therefore I'm"))
// I kniht, therefore m'I

【讨论】:

  • 我不知道!谢谢!
  • 这个解决方案似乎工作得很好,但前提是你不改变你正在迭代的字符串的总长度。在这里,倒车不会改变这一点。但是,如果您想用更长的单词替换每个单词,这将行不通。 inputString 中的原始单词范围不会改变,即使你改变了inputString。请注意!
猜你喜欢
  • 2017-04-03
  • 2017-05-09
  • 1970-01-01
  • 1970-01-01
  • 2018-07-26
  • 1970-01-01
  • 2015-12-13
  • 1970-01-01
相关资源
最近更新 更多