如何将字符串格式更改为缩写?

时间:2016-10-11 10:17:05

标签: swift string formatting converter

我有一个返回字符串的API,我想更改这些字符串的格式,以便所有单词都转换为第一个字母+"。"除了最后一个词保持不变。例如,"美利坚合众国" -----> "ü。 S. America"或者"皇家马德里" ------> " R。马德里" 。有人可以帮忙吗?谢谢。

2 个答案:

答案 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扩展程序中的帮助方法。