如何将单个字符类型转换为大写?

7

我想做的就是将单个的Character转换为大写,而不需要将其转换为String,然后调用.uppercased()。有没有内置的方法可以做到这一点,或者有没有办法让我从C中调用toupper()函数而不进行任何桥接?我真的不认为我应该为了如此简单的事情而额外操作。


5
我认为你需要通过字符串来实现。单个字符的大写版本也可以是包含多个字符的字符串,例如 "ß" -> "SS"。 - Martin R
另外,toupper() 只能操作 char 类型的变量,并且与语言环境相关。 - Martin R
另一个例子:“ffi”(连字)->“FFI”。或者“ᾀ”(一些希腊字母)->“ἈΙ”。 - Martin R
3个回答

12

调用 C 中的 toupper() 函数需要获取 Character 的 Unicode 代码点。但是,Character 没有获取其代码点的方法(一个 Character 可由多个代码点组成),因此您必须将 Character 转换为 String 才能获取其任何代码点。

因此,您确实需要转换为 String 才能取得进展。除非您将字符存储为 UnicodeScalar 而不是 Character。在这种情况下,您可以使用以下方法:

assert(unicodeScalar.isASCII) // toupper argument must be "representable as an unsigned char"
let uppercase = UnicodeScalar(toupper(CInt(unicodeScalar.value)))

但这并不比简单地使用String更易读:

let uppercase = Character(String(character).uppercased())

6
请注意,最后一行可能在运行时崩溃,例如对于character = "ß"(这些德国人太疯狂了:) - Martin R

0

看起来自从问这个问题以来,Swift 中为 Character 添加了 .uppercased() 方法,所以无需再担心将其转换为 String 或使用 C bridging。


0

只需将此添加到您的程序中

extension Character {
    
    //converts a character to uppercase
    func convertToUpperCase() -> Character {
        if(self.isUppercase){
            return self
        }
        return Character(self.uppercased())
    }
}

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