交换字符串大小写 - swift
Swap string case - swift
let str = "tHIS is A test"
let swapped_case = "This IS a TEST"
Swift 菜鸟,如何以编程方式执行第二条语句?
使用 switch 语句范围内检查来确定字母大小写,并使用 NSString
-桥接方法进行相应的转换。
let str = "tHIS is A test"
let swapped_case = "This IS a TEST"
func swapCase(string: String) -> String {
var swappedCaseString: String = ""
for character in string {
switch character {
case "a"..."z":
let uppercaseCharacter = (String(character) as NSString).uppercaseString
swappedCaseString += uppercaseCharacter
case "A"..."Z":
let lowercaseCharacter = (String(character) as NSString).lowercaseString
swappedCaseString += lowercaseCharacter
default:
swappedCaseString += String(character)
}
}
return swappedCaseString
}
swapCase(str)
我来晚了一点,但这也有效:-)
let str = "tHIS is A test"
var res = ""
for c in str {
if contains("ABCDEFGHIJKLMNOPQRSTUVWXYZ", c) {
res += "\(c)".lowercaseString
} else {
res += "\(c)".uppercaseString
}
}
res
此函数适用于所有 upper/lowercase 个字符
以 Unicode 定义,甚至来自 "foreign" 语言的那些,例如 Ä 或 ć:
func swapCases(_ str : String) -> String {
var result = ""
for c in str.characters { // Swift 1: for c in str {
let s = String(c)
let lo = s.lowercased() //Swift 1 & 2: s.lowercaseString
let up = s.uppercased() //Swift 1 & 2: s.uppercaseString
result += (s == lo) ? up : lo
}
return result
}
示例:
let str = "tHIS is a test ÄöÜ ĂćŒ Α" // The last character is a capital Greek Alpha
let swapped_case = swapCases(str)
print(swapped_case)
// This IS A TEST äÖü ăĆœ α
您已经有很多简洁的答案,但为了好玩,这里有一个过于详细的答案。
这确实是 map
的工作 – 遍历集合(在本例中为字符串)并对每个元素(此处为每个字符)执行操作。除了 map
接受任何集合,但只返回一个数组,然后你必须再次将其转换为字符串。
但是这里有一个 map
的版本,给定一个可扩展集合,返回相同类型的可扩展集合。
(它确实有需要两个集合包含相同类型的限制,但这对字符串来说没问题。你可以让它 return 成为不同的类型,但你必须告诉它哪个输入你想要的,即 map(s, transform) as String
这会很烦人)
func map<C: ExtensibleCollectionType>(source: C, transform: (C.Generator.Element) -> C.Generator.Element) -> C {
var result = C()
for elem in source {
result.append(transform(elem))
}
return result
}
然后写transform函数,先来个character的扩展,和其他答案类似。似乎很不满意你必须转换为字符串只是为了大写一个字符,真的没有好的(国际字符集友好的)方法来做到这一点吗?
extension Character {
var uppercaseCharacter: Character {
let s = String(self).uppercaseString
return s[s.startIndex]
}
var lowercaseCharacter: Character {
let s = String(self).lowercaseString
return s[s.startIndex]
}
}
还有翻转大小写的功能。我想知道这种模式匹配是否对国际友好。这似乎是 – "A"..."Z" ~= "Ä"
return 是真的。
func flipCase(c: Character) -> Character {
switch c {
case "A"..."Z":
return c.lowercaseCharacter
case "a"..."z":
return c.uppercaseCharacter
default:
return c
}
}
最后:
let s = map("Hello", flipCase)
// s is a String = "hELLO"
希望对您有所帮助。 inputString 和 resultString 分别是输入和输出。
let inputString = "Example"
let outputString = inputString.characters.map { (character) -> Character in
let string = String(character)
let lower = string.lowercased()
let upper = string.uppercased()
return (string == lower) ? Character(upper) : Character(lower)
}
let resultString = String(outputString)
在 Swift 5 中,我通过创建一个遍历字符串的每个字符的函数,并使用字符串方法更改每个字符来实现它,我将每个字符追加回一个新变量中:
func reverseCase(string: String) -> String {
var newCase = ""
for char in string {
if char.isLowercase {
newCase.append(char.uppercased())
}
else if char.isUppercase {
newCase.append(char.lowercased())
}
else {
newCase.append(char)
}
}
return newCase
}
然后在 print 语句中调用它时,只需将字符串传递给该函数即可:
print(reverseCase(string: str))
let str = "tHIS is A test"
let swapped_case = "This IS a TEST"
Swift 菜鸟,如何以编程方式执行第二条语句?
使用 switch 语句范围内检查来确定字母大小写,并使用 NSString
-桥接方法进行相应的转换。
let str = "tHIS is A test"
let swapped_case = "This IS a TEST"
func swapCase(string: String) -> String {
var swappedCaseString: String = ""
for character in string {
switch character {
case "a"..."z":
let uppercaseCharacter = (String(character) as NSString).uppercaseString
swappedCaseString += uppercaseCharacter
case "A"..."Z":
let lowercaseCharacter = (String(character) as NSString).lowercaseString
swappedCaseString += lowercaseCharacter
default:
swappedCaseString += String(character)
}
}
return swappedCaseString
}
swapCase(str)
我来晚了一点,但这也有效:-)
let str = "tHIS is A test"
var res = ""
for c in str {
if contains("ABCDEFGHIJKLMNOPQRSTUVWXYZ", c) {
res += "\(c)".lowercaseString
} else {
res += "\(c)".uppercaseString
}
}
res
此函数适用于所有 upper/lowercase 个字符 以 Unicode 定义,甚至来自 "foreign" 语言的那些,例如 Ä 或 ć:
func swapCases(_ str : String) -> String {
var result = ""
for c in str.characters { // Swift 1: for c in str {
let s = String(c)
let lo = s.lowercased() //Swift 1 & 2: s.lowercaseString
let up = s.uppercased() //Swift 1 & 2: s.uppercaseString
result += (s == lo) ? up : lo
}
return result
}
示例:
let str = "tHIS is a test ÄöÜ ĂćŒ Α" // The last character is a capital Greek Alpha
let swapped_case = swapCases(str)
print(swapped_case)
// This IS A TEST äÖü ăĆœ α
您已经有很多简洁的答案,但为了好玩,这里有一个过于详细的答案。
这确实是 map
的工作 – 遍历集合(在本例中为字符串)并对每个元素(此处为每个字符)执行操作。除了 map
接受任何集合,但只返回一个数组,然后你必须再次将其转换为字符串。
但是这里有一个 map
的版本,给定一个可扩展集合,返回相同类型的可扩展集合。
(它确实有需要两个集合包含相同类型的限制,但这对字符串来说没问题。你可以让它 return 成为不同的类型,但你必须告诉它哪个输入你想要的,即 map(s, transform) as String
这会很烦人)
func map<C: ExtensibleCollectionType>(source: C, transform: (C.Generator.Element) -> C.Generator.Element) -> C {
var result = C()
for elem in source {
result.append(transform(elem))
}
return result
}
然后写transform函数,先来个character的扩展,和其他答案类似。似乎很不满意你必须转换为字符串只是为了大写一个字符,真的没有好的(国际字符集友好的)方法来做到这一点吗?
extension Character {
var uppercaseCharacter: Character {
let s = String(self).uppercaseString
return s[s.startIndex]
}
var lowercaseCharacter: Character {
let s = String(self).lowercaseString
return s[s.startIndex]
}
}
还有翻转大小写的功能。我想知道这种模式匹配是否对国际友好。这似乎是 – "A"..."Z" ~= "Ä"
return 是真的。
func flipCase(c: Character) -> Character {
switch c {
case "A"..."Z":
return c.lowercaseCharacter
case "a"..."z":
return c.uppercaseCharacter
default:
return c
}
}
最后:
let s = map("Hello", flipCase)
// s is a String = "hELLO"
希望对您有所帮助。 inputString 和 resultString 分别是输入和输出。
let inputString = "Example"
let outputString = inputString.characters.map { (character) -> Character in
let string = String(character)
let lower = string.lowercased()
let upper = string.uppercased()
return (string == lower) ? Character(upper) : Character(lower)
}
let resultString = String(outputString)
在 Swift 5 中,我通过创建一个遍历字符串的每个字符的函数,并使用字符串方法更改每个字符来实现它,我将每个字符追加回一个新变量中:
func reverseCase(string: String) -> String {
var newCase = ""
for char in string {
if char.isLowercase {
newCase.append(char.uppercased())
}
else if char.isUppercase {
newCase.append(char.lowercased())
}
else {
newCase.append(char)
}
}
return newCase
}
然后在 print 语句中调用它时,只需将字符串传递给该函数即可:
print(reverseCase(string: str))