2016-10-11 73 views
0

我有一個返回字符串的API,我想更改這些字符串的格式,以便所有單詞都轉換爲它們的第一個字母+「。」。除了最後一個詞保持不變之外。例如「美利堅合衆國」-----「美國美國」或「皇馬」------「R.馬德里」。任何人都可以幫忙嗎?謝謝。如何將字符串格式更改爲縮寫?

回答

1
  • 獨立的串入並字(由" "分隔)
  • 對於這些字,可能篩選出介詞和連詞的陣列但最後一個詞
  • 最後,加入單詞與eachother和最後一個(非截斷)單詞的截短列表。

例如爲:

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擴展中的幫助方法。

+0

你是天才男人!感謝:D –

1

你可以使用組件(separatedBy:字符串)每個字符串分離到和基於它們之間的空白字符串數組:

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

希望有所幫助。一切都好。 (基於您的美國的例子)

  • 執行所有的第一字母的截短

  • +0

    感謝兄弟..你可以看看頂部的「dfri」響應:) –

    +0

    @AymenBRomdhane - 沒問題,dfri把我的僞代碼編譯成實際代碼給你! – Sparky

    相關問題