Swift和Java关于字符串和字符的比较

1. 字符串字面量

Swift和Java关于字符串操作大同小异。

Swift:字符串字面量(String Literals):我们可以在代码中包含一段预定义的字符串值作为字符串字面量。 字符串字面量是由双引号 ("") 包裹着的具有固定顺序的文本字符集。字符串字面量可以用于为常量和变量提供初始值。

代码如下:

let someString = "Some string literal value"

字符串字面量可以包含以下特殊字符:

  • 转义字符\0(空字符)、\\(反斜线)、\t(水平制表符)、\n(换行符)、\r(回车符)、\"(双引号)、\'(单引号)。
  • Unicode 标量,写成\u{n}(u为小写),其中n为任意的一到八位十六进制数。

初始化空字符串 (Initializing an Empty String):为了构造一个很长的字符串,可以创建一个空字符串作为初始值。 可以将空的字符串字面量赋值给变量,也可以初始化一个新的String实例,代码如下:

var emptyString = ""
var anotherEmptyString = String()
// 初始化 String 实例
// 两个字符串均为空并等价。

Swift 中的字符串是否可以修改仅通过定义的是变量还是常量来决定,实现了多种类型可变性操作的统一。

Swift 的String类型是值类型。 如果您创建了一个新的字符串,那么当其进行常量、变量赋值操作或在函数/方法中传递时,会进行值拷贝。

使用字符(Working with Characters):Swift 的String类型表示特定序列的Character(字符) 类型值的集合。 每一个字符值代表一个 Unicode 字符。 您可利用for-in循环来遍历字符串中的每一个字符,代码如下:

for character in "Dog!🐶" {
    print(character)
}
// D
// o
// g
// !
// 🐶

计算字符数量 (Counting Characters)代码如下:

let unusualMenagerie = "Koala 🐨, Snail 🐌, Penguin 🐧, Dromedary 🐪"
 print("unusualMenagerie has \(unusualMenagerie.characters.count) characters")

字符串插值 (String Interpolation):字符串插值是一种构建新字符串的方式,可以在其中包含常量、变量、字面量和表达式。 您插入的字符串字面量的每一项都被包裹在以反斜线为前缀的圆括号中,代码如下:

let multiplier = 3
let message = "\(multiplier) 乘以 2.5 是 \(Double(multiplier) * 2.5)"
// message 是 "3 乘以 2.5 是 7.5"

2. 字符串比较

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

字符串相等 (String Equality):两个字符串以同一顺序包含完全相同的字符,则认为两者字符串相等,代码如下:

let quotation = "我们是一样一样滴."
        let sameQuotation = "我们是一样一样滴."
        if quotation == sameQuotation {
            print("这两个字符串被认为是相同的")
        }
        // 打印输出:"这两个字符串被认为是相同的"

Swift没有像Java一样,提供equals()这样的method去比较。

前缀/后缀相等 (Prefix and Suffix Equality):通过调用字符串的hasPrefix/hasSuffix方法来检查字符串是否拥有特定前缀/后缀。 两个方法均需要以字符串作为参数传入并传出Boolean值。 两个方法均执行基本字符串和前缀/后缀字符串之间逐个字符的比较操作。具体代码如下:

let romeoAndJuliet : [String] = ["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 count = 0;
        for element in romeoAndJuliet{
            if element.hasPrefix("Act 1"){
                count++
            }
        }
        print("There are \(count) scenes in Act 1")
// 打印输出:"There are 5 scenes in Act 1"

您可以利用hasPrefix方法来计算话剧中第一幕的场景数,代码如下:

var act1SceneCount = 0
for scene in romeoAndJuliet {
    if scene.hasPrefix("Act 1 ") {
        ++act1SceneCount
    }
}
print("There are \(act1SceneCount) scenes in Act 1")
// 打印输出:"There are 5 scenes in Act 1"

3. 大写和小写字符串(Uppercase and Lowercase Strings)

我们可以通过字符串的uppercaseStringlowercaseString属性来访问大写/小写版本的字符串。代码如下:

let normal = "Could you help me, please?"
let shouty = normal.uppercaseString
// shouty 值为 "COULD YOU HELP ME, PLEASE?"
let whispered = normal.lowercaseString
// whispered 值为 "could you help me, please?"

 

posted @ 2016-06-07 22:30  自相矛盾  阅读(357)  评论(0编辑  收藏  举报