• Swift 字符串比较/判断

    2017-02-21 13:09:40
    Swift3.0语言教程比较、判断字符串,在一程序中字符串很多时,常常会做的操作就是对这些字符串进行比较和判断。本小节将讲解这些内容。 1.不区分大小写比较 字符串比较可以分为:不区分大小写比较、区分大小写...

    Swift3.0语言教程比较、判断字符串

    Swift3.0语言教程比较、判断字符串,在一个程序中字符串很多时,常常会做的操作就是对这些字符串进行比较和判断。本小节将讲解这些内容。

    1.不区分大小写比较

    字符串比较可以分为:不区分大小写比较、区分大小写比较以及本地化比较三部分。首先我们来看不区分大小写比较,不区分大小写比较顾名思义就是不区分字符串中字母的大小写,即A和a相同。在NSString中使用caseInsensitiveCompare(_:)方法实现这一功能,其语法形式如下:

    func caseInsensitiveCompare(_ string: String) -> ComparisonResult

    其中,string用来指定一个比较的字符串。该方法的返回值为ComparisonResult类型。ComparisonResult是一个枚举类型,包含了以下3个成员:

    q  orderedAscending(-1):左操作数小于右操作数。

    q  orderedSame(0):两个操作数相等。

    q  orderedDescending(1):左操作数大于右操作数。

    【示例1-29】以下将使用caseInsensitiveCompare(_:)方法对字符串进行比较。

    import Foundation

    var a=NSString(string:"Hello")

    var b=NSString(string:"hello")

    var c=NSString(string:"Swift")

    //比较字符串

    print(a.caseInsensitiveCompare(b as String).rawValue)

    print(a.caseInsensitiveCompare(c as String).rawValue)

    print(c.caseInsensitiveCompare(a as String).rawValue)

    运行结果如下:

    0

    -1

    1

    2.区分大小写比较

    有不区分大小写比较,相对的就有区分大小写比较。在NSString中提供了4种方法实现了这种比较,分别为compare(_:)、compare(_:options:)、compare(_:options:range:)和compare(_:options:range:locale:)方法。

    (1)compare(_:)方法就是用来比较字符串的,它需要区分字符串的大小写,其语法形式如下:

    func compare(_ string: String) -> ComparisonResult

    其中,string用来指定一个比较的字符串。

    【示例1-30】以下将使用compare(_:)方法实现字符串的比较。

    import Foundation

    var a=NSString(string:"Hello")

    var b=NSString(string:"hello")

    var c=NSString(string:"Hello")

    //比较字符串

    print(a.compare(b as String).rawValue)

    print(a.compare(c as String).rawValue)

    print(b.compare(a as String).rawValue)

    运行结果如下:

    -1

    0

    1

    (2)compare(_:options:)方法和compare(_:)方法实现的功能类似,它是对字符串进行比较,但是它比compare(_:)方法多了一个mask参数。该参数可以用来指定一个选项标记(这个标记可以作为字符串比较的条件)。在编程中,mask参数最常被设置为以下5种:

    q  caseInsensitive:不区分大小写比较

    q  literal:区分大小写比较

    q  backwards:从字符串末尾开始搜索

    q  anchored:搜索限制范围的字符串

    q  numeric:按照字符串里的数字为依据,算出顺序。例如 Foo2.txt < Foo7.txt < Foo25.txt

    compare(_:options:)方法的语法形式如下:

    func compare(_ string: String, options mask: NSString.CompareOptions = []) -> ComparisonResul

    【示例1-31】以下将使用compare(_:options:)方法实现对字符串的比较。

    import Foundation

    var a=NSString(string:"Hello")

    var b=NSString(string:"hello")

    print(a.compare(b as String, options: NSString.CompareOptions.caseInsensitive).rawValue)    //比较字符串

    运行结果如下:

    0

    (3)compare(_:options:range:)方法和compare(_:options:)方法的功能类似,但是它比compare(_:options:)方法多了一个rangeOfReceiverToCompare参数,此参数可以用来对比较范围进行设置。其语法形式如下:

    func compare(_ string: String, options mask: NSString.CompareOptions = [], range rangeOfReceiverToCompare: NSRange) -> ComparisonResult

    【示例1-32】以下将使用compare(_:options:range:)方法对字符串进行比较。

    import Foundation

    var a=NSString(string:"HEllo")

    var b=NSString(string:"Swift")

    print(a.compare(b as String, options: NSString.CompareOptions.caseInsensitive,range: NSMakeRange(1, 3)).rawValue)                                                                                   //比较字符串

    运行结果如下:

    -1

    (4)compare(_:options:range:locale:)方法和compare(_:options:range:)方法的功能类似,但是它比compare(_:options:range:)方法多了一个locale参数,此参数可以用来设置语言环境。其语法形式如下:

    func compare(_ string: String, options mask: NSString.CompareOptions = [], range rangeOfReceiverToCompare: NSRange, locale: AnyObject?) -> ComparisonResult

    【示例1-33】以下将使用compare(_:options:range:locale:)方法对字符串进行比较。

    import Foundation

    var a=NSString(string:"a")

    var b=NSString(string:"ä")

    var l=Locale.current

    print(a.compare(b as String, options: NSString.CompareOptions.caseInsensitive, range: NSMakeRange(0, 1), locale: l).rawValue)

    运行结果如下:

    -1

    3.本地化比较

    对于本地化比较在NSString中提供了3种方法,分别为:localizedCaseInsensitiveCompare(_:)、localizedStandardCompare(_:)和localizedCompare(_:)。

    (1)localizedCaseInsensitiveCompare(_:)方法为不区分大小写、本地化比较字符串,其语法形式如下:

    func localizedCompare(_ string: String) -> ComparisonResult

    其中,string用来指定一个比较的字符串。

    【示例1-34】以下将使用localizedCaseInsensitiveCompare(_:)方法比较字符串。

    import Foundation

    var a=NSString(string:"Hello")

    var b=NSString(string:"hello")

    var c=NSString(string:"Swift")

    //比较字符串

    print(a.localizedCaseInsensitiveCompare(b as String).rawValue)

    print(a.localizedCaseInsensitiveCompare(c as String).rawValue)

    print(c.localizedCaseInsensitiveCompare(a as String).rawValue)

    运行结果如下:

    0

    -1

    1

    (2)localizedStandardCompare(_:)方法为本地化标准字符串的比较,其语法形式如下:

    func localizedStandardCompare(_ string: String) -> ComparisonResult

    其中,string用来指定一个比较的字符串。

    【示例1-35】以下将使用localizedStandardCompare(_:)方法实现字符串的比较。

    import Foundation

    var a=NSString(string:"Hello")

    var b=NSString(string:"hello")

    print(a.localizedStandardCompare(b as String).rawValue)                                         //比较字符串

    运行结果如下:

    1

    (3)localizedCompare(_:)方法是区分大小写、本地化比较字符串,其语法形式如下:

    func localizedCompare(_ string: String) -> ComparisonResult

    其中,string用来指定一个比较的字符串。

    【示例1-36】以下将使用localizedCompare(_:)方法实现对字符串的比较。

    import Foundation

    var a=NSString(string:"Hello")

    var b=NSString(string:"hello")

    var c=NSString(string:"Hello")

    print(a.localizedCompare(b as String).rawValue)

    print(a.localizedCompare(c as String).rawValue)

    print(b.localizedCompare(a as String).rawValue)

    运行结果如下:

    1

    0

    -1

    4.判断字符串

    在NSString中提供了3种对字符串判断的方法,分别为hasPrefix(_:)、hasSuffix(_:)和isEqual(to:)方法。

    (1)hasPrefix(_:)方法用来判断字符串是否以某一指定字符串开头,其语法形式如下:

    func hasPrefix(_ str: String) -> Bool

    其中,str用来指定一个字符串。

    【示例1-37】以下将判断字符串a是否以"H"、"Hel"和"Hele"开头。

    import Foundation

    var a=NSString(string:"Hello")

    //判断字符串a是否以"H"开头

    if(a.hasPrefix("H")){

        print("a字符串是以H开头的")

    }else{

        print("a字符串不是以H开头的")

    }

    //判断字符串a是否以"Hel"开头

    if(a.hasPrefix("Hel")){

        print("a字符串是以Hel开头的")

    }else{

        print("a字符串不是以Hel开头的")

    }

    //判断字符串a是否以"Hele"开头

    if(a.hasPrefix("Hele")){

        print("a字符串是以Hele开头的")

    }else{

        print("a字符串不是以Hele开头的")

    }

    运行结果如下:

    a字符串是以H开头的

    a字符串是以Hel开头的

    a字符串不是以Hele开头的

    (2)hasSuffix(_:)方法正好和hasPrefix(_:)方法相反,它是用来判断字符串是否以某一指定字符串结尾的,其语法形式如下:

    func hasSuffix(_ str: String) -> Bool

    其中,str用来指定一个字符串。

    【示例1-38】以下将判断字符串a是否以"o"、"Hello"、"allo"结尾。

    import Foundation

    var a=NSString(string:"Hello")

    //判断字符串a是否以"o"结尾。

    if(a.hasSuffix("o")){

        print("a字符串是以o结尾的")

    }else{

        print("a字符串不是以o结尾的")

    }

    //判断字符串a是否以"Hello"结尾。

    if(a.hasSuffix("Hello")){

        print("a字符串是以Hello结尾的")

    }else{

        print("a字符串不是以Hello结尾的")

    }

    //判断字符串a是否以"allo"结尾。

    if(a.hasSuffix("allo")){

        print("a字符串是以allo结尾的")

    }else{

        print("a字符串不是以allo结尾的")

    }

    运行结果如下:

    a字符串是以o结尾的

    a字符串是以Hello结尾的

    a字符串不是以allo结尾的

    (3)isEqual(to:)方法是用来判断字符串是否相等的,其语法形式如下:

    func isEqual(to aString: String) -> Bool

    其中,aString用来指定字符串。

    【示例1-39】以下将判断字符串是否相等。

    import Foundation

    var  a=NSString(string:"Hello")

    var  b=NSString(string:"hello")

    var  c=NSString(string:"Swift")

    var  d=NSString(string:"Hello")

    //判断字符串a和b是否相等

    if(a.isEqual(to: b as String)){

        print("a、b两个字符串相等")

    }else{

        print("a、b两个字符串不相等")

    }

    //判断字符串a和c是否相等

    if(a.isEqual(to: c as String)){

        print("a、c两个字符串相等")

    }else{

        print("a、c两个字符串不相等")

    }

    //判断字符串a和d是否相等

    if(a.isEqual(to: d as String)){

        print("a、d两个字符串相等")

    }else{

        print("a、d两个字符串不相等")

    }

    运行结果如下:

    a、b两个字符串不相等

    a、c两个字符串不相等

    a、d两个字符串相等

    展开全文
  • swift中比较字符串

    2017-03-05 15:56:26
    比较相等 使用“==”或者“!=”来进行比较。 注意: String and character comparisons in Swift are not locale-sensitive. 字符串和字符是不敏感的。 比较前缀和后缀

    比较相等
    使用“==”或者“!=”来进行比较。
    这里写图片描述
    注意:
    String and character comparisons in Swift are not locale-sensitive.
    字符串和字符是不敏感的。
    比较前缀和后缀
    这里写图片描述

    展开全文
  • OC与Swift中的字符串

    2019-02-20 00:37:46
    一般情况下,使用一旧的字符串对象对一新声明的字符串对象进行赋值,其实就是新的指针指向同一个字符串对象,也就是指针的拷贝,并没有生成新的字符串。只有对一可变字符串对象进行拷贝,或者对任意字符串对象...

    一、OC中的字符串

    1. 引用类型

      在Object-C中,使用NSString和NSMutableString这两个类对字符串进行操作,一个字符串对象会被指针所引用。

      一般情况下,使用一个旧的字符串对象对一个新声明的字符串对象进行赋值,其实就是新的指针指向同一个字符串对象,也就是指针的拷贝,并没有生成新的字符串。只有对一个可变字符串对象进行拷贝,或者对任意字符串对象进行可变拷贝时才会生成一个新对象。

      同样的在函数、方法传值时,也是指针的传递,操作的都是同一份对象。

    2. 可变与不可变字符串

      NSString类型的对象是不可变字符串,NSString一旦被实例化,就不能再改变内容和长度。

      NSMutableString类型的对象是可变字符串,它可以进行拼接、移除、插入等操作。

    3. 常用字符串操作

    • 新建字符串
    // 创建一个空字符串
    NSString *str1 = [NSString string];
    NSString *str2 = @"";
        
    // 创建一个非空串
    NSString *str3 = @"我是一个字符串";
    
    • 是否空串
    NSString *name = @"";
    if (name.length == 0) {
        NSLog(@"名字是个空字符串");
    } else {
        NSLog(@"名字不是个空字符串");
    }
    
    • 长度
    name = @"Alean";
    NSInteger nameLength = name.length;
    NSLog(@"姓名长度:%zd个字符", nameLength);
    
    • 是否相同
    NSString *name2 = @"Alean";
    if ([name isEqualToString:name2]) {
        NSLog(@"姓名相同");
    } else {
        NSLog(@"姓名不同");
    }
    
    • 大小写转换
    NSString *upperName = name.uppercaseString;
    NSString *lowerName = name.lowercaseString;
    NSLog(@"姓名大写:%@ \n姓名小写:%@", upperName, lowerName);
    
    • 开头
    NSString *prefix = @"Ale";
    if ([name hasPrefix:prefix]) {
        NSLog(@"%@是以%@开头的", name, prefix);
    } else {
        NSLog(@"%@不是以%@开头的", name, prefix);
    }
    
    • 结尾
    NSString *suffix = @"na";
    if ([name hasSuffix:suffix]) {
        NSLog(@"%@是以%@结尾的", name, suffix);
    } else {
        NSLog(@"%@不是以%@结尾的", name, suffix);
    }
    
    • 从头截取子串
    NSInteger indexTo = 2;
    NSString *subNameTo = [name substringToIndex:indexTo];
    NSLog(@"%@从开头截取%@个字符的子串%@", name, @(indexTo), subNameTo);
    
    • 从指定位置截取子串
    NSInteger indexFrom = 3;
    NSString *subNameFrom = [name substringFromIndex:indexFrom];
    NSLog(@"%@从第%@个字符到结束的子串%@", name, @(indexFrom), subNameFrom);
    
    • 指定区间子串
    NSRange range = NSMakeRange(1, 2);
    NSString *subNameRange = [name substringWithRange:range];
    NSLog(@"%@从第%zd个字符截取长度为%zd的子串为%@", name, range.location, range.length, subNameRange);
    
    • 拼接
    NSString *all = [name stringByAppendingString:name2];
    NSLog(@"%@拼接%@的结果是:%@", name, name2, all);
    

    二、swift中的字符串

    1. 引用类型

      Swift中,String类型对象一个实际的值,使用旧的String对象对新定义的String赋值,实际创建了一个相等的新值。

      同样,函数传参时,也是传递的实际值,并且创建了一个新的字符串,函数内的操作不会改变原有的String对象。

    2. 可变与不可变字符串

      Swift中可变字符串使用var修饰,let用来修饰不可变字符串。

    3. 常用字符串操作

    • 创建一个空字符串
    let emptyStr1 = ""
    let emptyStr2 = String()
    
    • 创建字符串常量
    let nameConst = "Jack"
    
    • 创建字符串变量
    var nameVariable = "xiaoming"
    nameVariable = "xiaogang"
    
    • 是否空串
    var name = ""
    if name.isEmpty {
        print("名字是个空字符串")
    } else {
        print("名字叫:\(name)")
    }
    

    // 长度
    name = “Alean”
    let nameLength = name.characters.count
    print(“姓名长度:(nameLength)个字符”)

    • 是否相同
    let name2 = "Alean"
    if name == name2 {
        print("姓名相同")
    } else {
        print("姓名不同")
    }
    
    • 大小写转换
    let upperName = name.uppercased()
    let lowerName = name.lowercased()
    print("姓名大写:\(upperName) \n姓名小写:\(lowerName)")
    
    • 开头
    let prefix = "Ale"
    if name.hasPrefix(prefix) {
        print("\(name)是以\(prefix)开头的")
    } else {
        print("\(name)不是以\(prefix)开头的")
    }
    
    • 结尾
    let suffix = "na"
    if name.hasSuffix(suffix) {
        print("\(name)是以\(suffix)结尾的")
    } else {
        print("\(name)不是以\(suffix)结尾的")
    }
    
    • 从头截取子串
    let indexTo = 2
    let subIndexTo = name.index(name.startIndex, offsetBy: indexTo)
    let subNameTo = name.substring(to: subIndexTo)
    print("\(name)从开头截取\(indexTo)个字符的子串\(subNameTo)")
    
    • 从指定位置截取子串
    let indexFrom = -2
    let fromIndexFrom = name.characters.count + indexFrom
    let subIndexFrom = name.index(name.endIndex, offsetBy: indexFrom)
    let subNameFrom = name.substring(from: subIndexFrom)
    print("\(name)从第\(fromIndexFrom)个字符到结束的子串\(subNameFrom)")
    
    • 指定区间子串
    let subFormIndex = 1
    let subLength = 2
    let rangeStartIndex = name.index(name.startIndex, offsetBy: subFormIndex)
    let rangeLengthIndex = name.index(name.startIndex, offsetBy: subFormIndex + subLength)
    let range = Range(uncheckedBounds: (lower: rangeStartIndex, upper: rangeLengthIndex))
    let subNameRange = name.substring(with: range)
    print("\(name)从第\(subFormIndex)个字符截取长度为\(subLength)的子串为\(subNameRange)")
    
    • 拼接
    let all = name + name2
    print("\(name)拼接\(name2)的结果是:\(all)")
    
    展开全文
  • 例1: NSString *string = @"one"; NSString *stringTwo= @"two";  BOOL isResult = [string compare:stringTwo];  NSLog(@"=========%d",isResult);...例2: ...字符串相等用方法isEqualTo

    例1:

    NSString *string = @"one";

    NSString *stringTwo= @"two";

     BOOL isResult = [string compare:stringTwo];

     NSLog(@"=========%d",isResult);

    0相等,-1不相等


    例2:

    字符串相等用方法isEqualToString

    if([string isEqualToString:stringTwo]

    {

         //相等

    }

    展开全文
  • 在 iOS 开发中, 有时需要判断两个字符串是否相等。 对于初学者来说, 由于概念不清楚,经常出现一些诡异的错误。 这里给出代码示例:  NSString *strA = [NSString stringWithFormat:@"a"];...
    在 iOS 开发中, 有时需要判断两个字符串是否相等。 对于初学者来说, 由于概念不清楚,经常出现一些诡异的错误。  

    这里给出代码示例: 


    NSString *strA = [NSString stringWithFormat:@"a"];

    NSString *strB = [NSString stringWithFormat:@"b"];

    if( strA == strB)

        NSLog(@"A is equal to B");

        else

        NSLog(@"A is not equal to B");

    运行这段code, 在console 上的输出是: A is not equal to B


    代码做些改动, 将 strA 与strB 设为相等。

    NSString *strA = [NSString stringWithFormat:@"a"];

    NSString *strB = [NSString stringWithFormat:@"a"];

    if( strA == strB)

        NSLog(@"A is equal to B");

        else

        NSLog(@"A is not equal to B");

    运行这段code ,你会发现, 在console上的输出仍然是 A is not equal to B 。


    这时候,你开始产生怀疑, 这是为什么呢 ?

    问题出在 字符串对比的语句上。


    if ( strA == strB) // 这个strA, strB 是指针, 虽然字符串的内容是相同的, 但指向字符串的 指针肯定是不同的, 也不能相同啊。 (为了更好地理解字符串,需要弄清楚 指针的概念。 内存的分配。 )


    //if( strA == strB)

        if ([strA isEqualToString:strB])

    iOS SDK 本身 也提供了 字符串对比的方法: isEqualToString:

    用这个字符串方法时, 要注意的事项: if 的后面必须 是一对括号。既然 isEqualToString: 是一个method, method 的使用 都是通过 中括号 来完成的。 


    特别注意的是: 在 iOS 中,既有 (... ), 也有 [ ... ] , 二者是有差别的。 在使用时,要特别注意。

    展开全文
  • Swift中关于字符串的截取与OC还是有很大的区别的,要说字符串的截取,就要先说下“范围”,OC中使用的是NSRange函数来指示一起始位置和长度,而Swift中的范围使用起来就方便得多,有两种形式: 1...5表示闭区间[1...
  • 2.3 Swift字符串比较

    2016-12-24 08:03:54
    let str = "hello"    // >= != 都可以啊  if str == "hello"  {  print(str)  }    if str < "heoo"  {
  • 检测字符串是否相等

    2018-11-27 21:33:39
    1、可以使用equals方法检测两个字符串是否相等 2、也可以使用compareTo方法进行比较 当比较两个字符串是否相等而不区分大小写时,也可以使用 equalsIgnoreCase compareToIgnoreCase 这两进行判断   ...
  • [swift]4.0原生字符串

    2017-03-05 15:40:42
    swift】4.0原生字符串
  • Swift入门系列教程Swift字符Swift入门(一)——基本语法Swift入门(三)——元组(Tuple)定义Swift中的字符,与OC有些不同,每一个字符代表了一可拓展的字母集,可拓展的字母集由若干(大于等于一)Unicode...
  • Swift-字符串和字符

    2019-07-29 09:25:53
    1. 字符串Swift 中 String 类型是值类型。 如果你创建了一新的字符串,那么当其进行常量、变量赋值操作,或在函数/方法中传递时,会进行值拷贝。 在前述任一情况下,都会对已有字符串值创建新副本,并对该新...
  • Swift - 字符和字符串

    2015-08-30 23:55:59
    Swift使用Character类型代表单个字符,使用String代表字符串字符串表示一有序的字符集合,例如Hello,word!代表字符串,String也可被当成多Character的有序集合。 字符串字面量 Swift允许在代码中包含一段预...
  • Swift字符串

    2016-07-05 16:01:36
    字符串不管是Object-C还是Swift还是Java等等其他的语言,都可以说是重点,虽然不难,但是用到的地方却非常多,几乎都是字符串的处理,这一篇我们就来好好说说字符串:创建一可变字符串:var stringA = "Hello, ...
  • swift字符串的处理

    2016-06-21 17:40:12
    今天总结下swift中对于字符串的操作,记录下工作中常用的。。。 1、字符串的声明  关于字符串的声明可以标注类型,也可以不标注,如 // 1、字符串声明 var emptyStr : String = " "//声明一字符串 var str : ...
  • swift 字符串

    2017-02-03 16:25:49
    字符串字面量 可以在代码中包含一段预定义的字符串值作为字符串字面量。字符串字面量是由双引号...要创建一字符串作为初始值,可以将空的字符串字面量赋值给变量,也可以初始化一新的string实例: var emptyStr
  • swift3.0 关于字符串

    2016-10-10 17:47:46
    //: Playground - noun: a place where people can playimport UIKit//字符串字面量 func zfczml(){/* 什么是字符串 String是例如“hello, world”,“海贼王” 这样的有序的Character(字符)类型的值的集合,...
  • 字符串String1.声明// 空字符串 let emptyString = "" let anatherString = String() if emptyString.isEmpty { print("空的,我擦") }2.转义字符/// 转义字符\0(空字符)、\\(反斜线)、\t(水平制表符)、\n(换行符)...
  • 在OC里判断字符串长度是否大于0时,我们还要判断字符串是不是可能为nil。但是在Swift里,一为String类型的变量是不可能为nil的,只有可选类型的变量才有可能是nil。所以: 字符串判断: if tempString....
  • ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/)➤GitHub地址:...
  • Swift-字符和字符串

    2016-07-30 22:43:12
    字符 对比 OC 与 Swift字符的区别 char charValue = 'a';//OC当中的字符:var charValue...2.Swift中的字符类型和OC中的也不一样 OC中的字符占一字节,因为它只包含ASCII表中的字符 Swift中的字符除了可以存储ASCII
1 2 3 4 5 ... 20
收藏数 2,316
精华内容 926