如何使用Swift iOS将字符串中的每个单词首字母大写

53

有没有一种函数可以将字符串中的每个单词首字母大写,或者这是一个手动的过程?

例如,"bob is tall",我想要 "Bob Is Tall"

肯定有这样的函数,但我在找到的 Swift IOS 答案中似乎都没有涉及到这个问题。


1
var someString = "lol"; someString.capitalized // "Lol" - Khaledonia
一些其他人在下面详细说明了这个选项。 ;) - Christopher Wade Cantley
8个回答

62

您是否正在寻找capitalized

讨论
将每个单词的第一个字符更改为相应的大写值,并将所有剩余字符设置为相应的小写值的字符串。

和/或capitalized(with locale:)(另请参见:localizedCapitalized

使用指定的区域设置返回接收器的大写表示形式。

对于呈现给用户的字符串,请传递当前区域设置(Locale.current)。要使用系统区域设置,请传递nil。


我还没有尝试过 capitalizedStringWithLocale,所以我会尝试一下,并在几分钟后回来评论。 - Christopher Wade Cantley
2
谢谢。事实证明,苹果文档中的Swift示例存在打字错误,这让我陷入了困境(比喻)。 - Christopher Wade Cantley
在Swift的新版本中,这现在只是capitalizedcapitalized(with: Locale?)localizedCapitalized。在Objective-C中,名称仍然与上面相同。长话短说,在Obj-C中,惯例仍然是用该类型的简短名称后缀来返回该类型的实例属性,例如…String - 但在Swift中不是这样,Swift编译器会自动从从Obj-C到Swift桥接的属性名称中删除该后缀。 - Slipp D. Thompson
@SlippD.Thompson 这是非常有用和全面的信息,为过时的答案提供了急需的更新。你可以随意编辑你看到的这样的答案来更新它们。 :) - James Webster

38

Swift 3:

var lowercased = "hello there"

var stringCapitalized = lowercased.capitalized
//prints:  "Hello There"

22

iOS 9以后,本地化的大写功能已经可用,因为在不同语言中,大写字母可能会有所不同。

if #available(iOS 9.0, *) {
  "istanbul".localizedCapitalizedString
  // In Turkish: "İstanbul"
}

2
对于Swift,它是localizedCapitalized,对于ObjC,它是localizedCapitalizedString - Marcus Adams

12
上面提供的答案示例。
   var sentenceToCap = "this is a sentence."
println(sentenceToCap.capitalizedStringWithLocale(NSLocale.currentLocale())  )

最终结果是字符串"This Is A Sentence"


8

针对Swift 3,这已更改为capitalized

讨论
该属性执行规范(非本地化)映射。它适用于需要稳定结果而不依赖于当前语言环境的编程操作。 首字母大写的字符串是首个单词的每个字符更改为其相应的大写值,并将所有剩余字符设置为其相应的小写值所组成的字符串。“单词”是由空格、制表符或行终止符(在getLineStart(_:end:contentsEnd:for:)中列出)分隔的任何字符序列。某些常见的单词分隔标点符号不被视为单词分隔符,因此该属性可能不会为多个单词的字符串产生所需的结果。 大小写转换不能保证对称或生成与原始字符串相同长度的字符串。请参阅lowercased以获取示例。


5
有一个内置函数可以实现这个功能。
nameOfString.capitalizedString

这个函数会将字符串中的每个单词首字母都转换成大写。如果只需要将字符串的第一个字母大写,可以使用:

nameOfString.replaceRange(nameOfString.startIndex...nameOfString.startIndex, with: String(nameOfString[nameOfString.startIndex]).capitalizedString)

旧帖

这是一个指向旧帖的链接。

我尝试了这个,但对我没用。它似乎只会捕获第一个单词。我找到了推荐这个的线程。 - Christopher Wade Cantley

0

这是我想出来的看起来可行的方案,但如果有更好的方法,我也很乐意尝试。

    func firstCharacterUpperCase(sentenceToCap:String) -> String {

    //break it into an array by delimiting the sentence using a space
    var breakupSentence = sentenceToCap.componentsSeparatedByString(" ")
    var newSentence = ""

    //Loop the array and concatinate the capitalized word into a variable.
    for wordInSentence  in breakupSentence {
        newSentence = "\(newSentence) \(wordInSentence.capitalizedString)"
    }

    // send it back up.
    return newSentence
}

或者如果我想将其用作字符串类的扩展。

extension String {
var capitalizeEachWord:String {
    //break it into an array by delimiting the sentence using a space
    var breakupSentence = self.componentsSeparatedByString(" ")
    var newSentence = ""

    //Loop the array and concatinate the capitalized word into a variable.
    for wordInSentence  in breakupSentence {
        newSentence = "\(newSentence) \(wordInSentence.capitalizedString)"
    }

    // send it back up.
    return newSentence
}
}

再次,欢迎任何更好的建议。


0

Swift 5 版本的 Christopher Wade 的回答

let str = "my string"

let result = str.capitalized(with: NSLocale.current)

print(result) // prints My String

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接