我有一个返回字符串的API,我想更改这些字符串的格式,以便所有单词都转换为第一个字母+"。"除了最后一个词保持不变。例如,"美利坚合众国" -----> "ü。 S. America"或者"皇家马德里" ------> " R。马德里" 。有人可以帮忙吗?谢谢。
答案 0 :(得分:1)
您可以使用组件(separatedBy:String)根据字符串之间的空格将每个字符串分隔为字符串数组:
var str = "United States of America"
print(str.components(separatedBy: " ")) // Outputs ["United", "States", "of", "America"]
然后遍历此数组,根据需要修改每个单词,并将结果附加到变量resultString。在你的情况下,你只想取任何不属于预定义组的单词的第一个字母(例如“of”,“and”等),将其设为大写(带有一个名为uppercased()) ,将其与“。”连接起来。并将其附加到您的字符串。当你到达数组的最后一个元素时,只需按原样附加单词。
您可以在开发者参考资料中找到更多信息:https://developer.apple.com/reference/swift/string
希望有所帮助。一切都好。
答案 1 :(得分:1)
" "
分隔)E.g:
import Foundation
// help function used to fix cases where the places
// words are not correctly uppercased/lowercased
extension String {
func withOnlyFirstLetterUppercased() -> String {
guard case let chars = self.characters,
!chars.isEmpty else { return self }
return String(chars.first!).uppercased() +
String(chars.dropFirst()).lowercased()
}
}
func format(placeString: String) -> String {
let prepositionsAndConjunctions = ["and", "of"]
guard case let wordList = placeString.components(separatedBy: " ")
.filter({ !prepositionsAndConjunctions.contains($0.lowercased()) }),
wordList.count > 1 else { return placeString }
return wordList.dropLast()
.reduce("") { $0 + String($1.characters.first ?? Character("")).uppercased() + "." } +
" " + wordList.last!.withOnlyFirstLetterUppercased()
}
print(format(placeString: "United States of America")) // "U. S. America"
print(format(placeString: "uniTED states Of aMERIca")) // "U. S. America"
print(format(placeString: "Real Madrid")) // "R. Madrid"
print(format(placeString: "Trinidad and Tobago")) // "T. Tobago"
print(format(placeString: "Sweden")) // "Sweden"
如果您知道您的原始位置字符串要正确格式化w.r.t.上层和上层小写,然后你可以通过例如将上面的解决方案修改为更简洁的解决方案。删除String
扩展程序中的帮助方法。