Swift语法基础:14 - Swift的字符使用, 计算数量, 连接字符串和字符, 字符串插值, 比较字符串...

接着前面的字符串开始讲:


1. 使用字符

wift 的 String 类型表示特定序列的字符值的集合。每一个字符值代表一个 Unicode 字符。

可以用 for-in 循环来遍历字符串中的每一个字符:

for character in "Dog!��" {
    println(character)
}
// 打印出来的结果: D
o
g
!
��

打印出来的结果

另外,通过标明一个 Character 类型注解并通过字符字面量进行赋值,可以建立一个独立的字符常量或变量:

let yenSign: Character = "¥"

2.计算字符数量

在字符和字符串中, 有一个函数是可以打印字符的数量, 比如:

var variableString = "Horse"
variableString += " and carriage"
println("\(countElements(variableString))")
// 打印出来的结果: 18

let unusualMenagerie = "Koala ��, Snail ��, Penguin ��, Dromedary ��"
println("unusualMenagerie has \(countElements(unusualMenagerie)) characters")
// 打印出来的结果: unusualMenagerie has 40 characters

打印字符

PS:
1.不同的 Unicode 字符以及相同 Unicode 字符的不同表示方式可能需要不同数量的 内存空间来存储,所以 Swift 中的字符在一个字符串中表示并不一定占用相同的内存空 间。因此,字符串的长度不得不通过迭代字符串中每一个字符的长度来进行计算。如果 您正在处理一个长字符串,需要注意 countElements 函数必须遍历字符串中的字符,以 精准计算字符串的长度。

2.另外需要注意的是通过 countElements 返回的字符数量并不总是与包含相同字符的 NSString 的 length 属性相同。NSString 的 length 属性是基于利用 UTF-16 表示的十 六位 code units 数目,而不是基于 Unicode 字符。为了解决这个问题,NSString 的 length 属性在被 Swift 的 String 值访问时会被称为 utf16count。


3.连接字符串和字符

和前面一样, 字符和字符串也可以加在一起的, 但这里要做一些特殊的处理, 比如:

let string1 = "Hello"
let string2 = " World"

let character1: Character = "!"
let character2: Character = "?"

var welcome = string1 + string2
welcome.append(character1)
println(welcome)
// 打印出来的结果: Hello World!

也可以使用加法赋值运算:

var characterPlusCharacter = string1
characterPlusCharacter += string2
println(characterPlusCharacter)
// 打印出来的结果: Hello World

4.字符串插值:

字符串插值是一种全新的构建字符串的方式,可以在其中包含常量、变量、字面量和表达式, 比如:

let multiplier = 3
let message = "\(multiplier) times 2.5 is \(Double(multiplier) * 2.5)"
println(message)
// 打印出来的结果: 3 times 2.5 is 7.5

PS: 插值字符串中写在括号中的表达式不能包含非转义双引号 ( “” ) 和反斜杠 ( \ ) 并且不能包含回车或换行符。


5.比较字符串

Swift 供了三种方式来比较字符串的值:字符串相等,前缀相等和后缀相等。

字符串相等:

let quotation = "We're a lot alike, you and I."
let sameQuotation = "We're a lot alike, you and I."
if quotation == sameQuotation {
    println("These two strings are considered equal")
}
// 打印出来的结果: These two strings are considered equal

前后缀相等:

let romeoAndJuliet = [
    "Act 1 Scene 1: Verona, A public place",
    "Act 1 Scene 2: Capulet's mansion",
    "Act 1 Scene 3: A room in Capulet's mansion",
    "Act 1 Scene 4: A street outside Capulet's mansion",
    "Act 1 Scene 5: The Great Hall in Capulet's mansion",
    "Act 2 Scene 1: Outside Capulet's mansion",
    "Act 2 Scene 2: Capulet's orchard",
    "Act 2 Scene 3: Outside Friar Lawrence's cell",
    "Act 2 Scene 4: A street in Verona",
    "Act 2 Scene 5: Capulet's mansion",
    "Act 2 Scene 6: Friar Lawrence's cell"
]

var act1SceneCount = 0
    for scene in romeoAndJuliet {
    if scene.hasPrefix("Act 1 ") {
        ++act1SceneCount
    }
}
println("There are \(act1SceneCount) scenes in Act 1")
// 打印出来的结果: There are 5 scenes in Act 1
var mansionCount = 0
var cellCount = 0
for scene in romeoAndJuliet {
    if scene.hasSuffix("Capulet's mansion"){
        ++mansionCount
    } else if scene.hasSuffix("Friar Lawrence's cell"){
        ++cellCount
    }
}
println("\(mansionCount) mansion scenes; \(cellCount) cell scenes")
// 打印出来的结果: 6 mansion scenes; 2 cell scenes

6.大小写字符串

在Swift当中也有一个函数, 可以直接把字符串变成全部大写字母, 或者全部小写字母:

let normal = "Could you help me, please?"
let shouty = normal.uppercaseString
let whispered = normal.lowercaseString

println("\(shouty), \(whispered)")
// 打印出来的结果:COULD YOU HELP ME, PLEASE?, could you help me, please?

好了, 这次我们就讲到这里, 下次我们继续~

转载于:https://www.cnblogs.com/iOSCain/p/4333124.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值