如何在Swift中将字符串/数组中的每个字母大写?

0tdrvxhp  于 2023-04-04  发布在  Swift
关注(0)|答案(3)|浏览(89)

我尝试在Swift中将字符串中的每个偶数占位符大写。因此[0],[2],[4],[6]中的字符都大写。
我有一个声明的变量:

var str = "This is a test"

我有一个数组,它将变量分解成一个数组:

let characters = Array(str) //Creates the array "["T", "h", "i", "s", " ", "i", "s", " ", "a", " ", "t", "e", "s", "t"]\n"

最重要的是,我创建了一个空数组来输入新的大写/小写字母

var newCharacters = Array<Character>()

然后在0处声明index

var index = 0 //declaring the index at 0

我试图弄清楚如何创建for循环,该循环将嗅出偶数数组项,然后将其中的字符大写。
我已经创建了一个for循环,它将操作数组中的偶数占位符,我只是不知道将每个其他占位符的字符串大写的语法:

for letter in characters {

   if index % 2 == 0 {

     }

}

我想弄明白:语法是什么每隔一个字母大写(数组中的偶数),把它们放在新数组中,然后把它转换回字符串。
最终结果应该是:

"ThIs iS TeSt"
ctehm74n

ctehm74n1#

您可以按顺序合并enumeratedmapjoined以创建结果:

let str = "This is a test"

let result = str.enumerated()
                .map { $0.offset % 2 == 0 ? String($0.element).uppercased() : String($0.element) }
                .joined()

print(result)
ThIs iS A TeSt

说明:

  1. String可以被枚举为Character的数组。在String上调用.enumerated()会产生一个(offset: Int, element: Character)元组序列。
  2. map接受一个序列并创建一个数组。map后面的闭包依次为序列的每个元素调用,闭包返回的值成为新数组中的下一个元素。
  3. $0是传递给map的值的默认名称。在本例中,我们传递的是(offset: Int, element: Character)元组。$0.offset是字符在String中的位置,$0.element是字符。
    1.这里使用三进制运算符返回uppercased()String,如果偏移量是偶数,则从Character创建;如果偏移量是奇数,则仅返回String
  4. map的结果是[String],然后使用joined()String的数组连接回单个String
lbsnaicq

lbsnaicq2#

一种方法是使用stride

var str = "This is a test" 
var chars = Array(str).map { String($0) }
for i in stride(from: 0, to: chars.count, by: 2) {
  chars[i] = chars[i].uppercased()
}
var hiphopcasedStr = chars.joined()

请注意,在使用Unicode时,有些字符大写为多字符串,因此Character数组并不十分合适(因此需要转换为String数组)。

ddarikpa

ddarikpa3#

试试这个代码

var str = "This is a test"
var result = [String]()
for (index,element) in str.enumerated() {
    var val:String =  String(element).lowercased()
    if index % 2 == 0 {
        val = String(element).uppercased()
    }
    result.append(val)
}

print(result.joined())

结果
这是个测试

相关问题