Swift实现带变位词规则与数字排除的单词反转功能求助
Swift 单词反转功能扩展实现
需求说明
- 带变位词规则的单词反转:反转单词后将首字符移动至第三位(示例:
Hello→lloeH、world→lrdow) - 排除数字的单词反转:仅反转非数字单词,纯数字串保持原样(示例:
Hello world 1234→olleH dlrow 1234)
修改后的代码
import Foundation class ReverseWords { // 基础单词反转方法 public func reverse(textField: String) -> String { guard !textField.isEmpty else { return "" } return textField.trimmingCharacters(in: .whitespacesAndNewlines) .components(separatedBy: " ") .map { String($0.reversed()) } .joined(separator: " ") } // 需求1:带变位词规则的单词反转 public func reverseWithAnagramRule(textField: String) -> String { guard !textField.isEmpty else { return "" } let processedWords = textField.trimmingCharacters(in: .whitespacesAndNewlines) .components(separatedBy: " ") .map { word -> String in let reversedWord = String(word.reversed()) guard reversedWord.count >= 3 else { return reversedWord } var chars = Array(reversedWord) let firstChar = chars.removeFirst() chars.insert(firstChar, at: 2) return String(chars) } return processedWords.joined(separator: " ") } // 需求2:排除数字的单词反转 public func reverseExcludingNumbers(textField: String) -> String { guard !textField.isEmpty else { return "" } let processedWords = textField.trimmingCharacters(in: .whitespacesAndNewlines) .components(separatedBy: " ") .map { word -> String in let isPureNumber = CharacterSet.decimalDigits.isSuperset(of: CharacterSet(charactersIn: word)) return isPureNumber ? word : String(word.reversed()) } return processedWords.joined(separator: " ") } // 可选:同时满足两个需求的整合方法 public func reverseWithAnagramAndExcludeNumbers(textField: String) -> String { guard !textField.isEmpty else { return "" } let processedWords = textField.trimmingCharacters(in: .whitespacesAndNewlines) .components(separatedBy: " ") .map { word -> String in let isPureNumber = CharacterSet.decimalDigits.isSuperset(of: CharacterSet(charactersIn: word)) guard !isPureNumber else { return word } let reversedWord = String(word.reversed()) guard reversedWord.count >= 3 else { return reversedWord } var chars = Array(reversedWord) let firstChar = chars.removeFirst() chars.insert(firstChar, at: 2) return String(chars) } return processedWords.joined(separator: " ") } }
代码说明
- 基础反转方法:保留原有逻辑,处理空输入、去除首尾空白后拆分单词,反转每个单词再拼接。
- 变位词规则实现:
- 先反转单词,若长度≥3,将首字符移除并插入到索引为2的位置,实现“首字符向前移动两位”的效果。
- 长度不足3的单词直接返回反转结果,避免数组越界。
- 数字排除实现:
- 使用
CharacterSet.decimalDigits判断单词是否为纯数字,比Int(word)更可靠(支持超长数字串)。 - 纯数字单词直接返回,非数字单词执行反转。
- 使用
- 整合方法:同时应用变位词规则和数字排除逻辑,一次性满足两个需求。
内容的提问来源于stack exchange,提问作者Gucci
相关产品推荐
相关产品推荐

