美文网首页Swift基础
Swift中如何判断字符是否为空串

Swift中如何判断字符是否为空串

作者: 喔牛慢慢爬 | 来源:发表于2021-09-24 14:00 被阅读0次
    一、前言

    开发的过程中经常要判断字符串是否为空,包括包含多个空格的字符串,如" ",这个字符串在程序中也要判别为空串。那么如何判断字符串为空呢

    二、系统提供的方法

    可以用系统原生的方法判断

    • 通过字符串自带的属性isEmpty判断是否为空:

      A Boolean value indicating whether a string has no characters

    var text = "hello!"
    //如果有字符返回false,如果没有字符返回true.但是如果字符串是空格或换行符,则认为存在字符返回false
    text.isEmpty 
    
    • 通过获取字符串的字符数count判断是否为空:
    var text = "hello!"
    //如果字符数大于0,则认为字符串不为空,如果字符数等于0,则认为字符串为空。但是如果字符串是空格或换行符,则 count会大于0,字符串不为空
    text.count == 0 
    

    可见以上两种方法无法处理text = " "text = "\n"这些形式的字符串,也就是说Swift认为" "不是空字串!

    所以我们可以通过对String进行扩展其属性来实现,看下边。

    三、对String的扩展方法

    先来个测试代码

    class ViewController: UIViewController {
        //text的值可以修改为:"","  "," 哈哈","\n"进行测试
        var text = "哈哈"
        override func viewDidLoad() {
            super.viewDidLoad()
            print("isEmpty:\(text.isEmpty)")
            print("count:\(text.count == 0)")
            print("isBlank:\(text.isBlank)")
            print("isReBlank:\(text.isReBlank)")
        }
    }
    extension String{
        /// 通过高阶函数allSatisfy,判断字符串是否为空串
        var isBlank:Bool{
            /// 字符串中的所有字符都符合block中的条件,则返回true
            let _blank = self.allSatisfy{
                let _blank = $0.isWhitespace
                print("字符:\($0) \(_blank)")
                return _blank
            }
            return _blank
        }
        ///通过裁剪字符串中的空格和换行符,将得到的结过进行isEmpty
        var isReBlank:Bool{
            let str = self.trimmingCharacters(in: .whitespacesAndNewlines)
            return str.isEmpty
        }
    }
    
    
    • 使用allSatisfy和isWhitespace进行扩展:

      1. allSatisfy是swift中提供的阶函数,表示所有元素是否满足符合设定的条件,并返回bool值。

      2. isWhitespace是Character的一个属性,用户判定字符是否是空。

      A Boolean value indicating whether this character represents whitespace, including newlines.

      For example, the following characters all represent whitespace:

      //以下字符均表示空白

      "\t" (U+0009 CHARACTER TABULATION)

      " " (U+0020 SPACE)

      U+2029 PARAGRAPH SEPARATOR

      U+3000 IDEOGRAPHIC SPACE

      1. 代码思想:

      通过allSatisfy遍历字符串中的每个字符,将每个字符做isWhitespace判断,如果发现有一个字符返回false,则结束遍历,扩展属性返回当前字符串不为空字符串的判定。

      /// 通过高阶函数allSatisfy,判断字符串是否为空串
          var isBlank:Bool{
              /// 字符串中的所有字符都符合block中的条件,则返回true
              let _blank = self.allSatisfy{
                  let _blank = $0.isWhitespace
                  print("字符:\($0) \(_blank)")
                  return _blank
              }
              return _blank
          }
      

      eg. 如果text = " ",text.isBlank的结果为true

    • 使用trimmingCharacters进行扩展:

      1. trimmingCharacters:修剪字符

        用于截取字符串,根据CharacterSet的配置处理截取字符串,这里用到了whitespacesAndNewlines,表示将字符串中的空格和换行符去除。

      2. characterSet:字符集

        字符集,也就是一堆字符的集合,就是说把我们平常见到的单个字符按照一定的条件进行了分类

        例如

        CharacterSet.whitespacesAndNewlines--空格和换行符
        CharacterSet.letters--所有英文字母的集合
        
      3. 代码思想:

        将需要校验的字符串中的空格或换行符删除,获得新的字符串,再片段新字符串的isEmpty是否为空,进而校验完成原始字符串

          ///通过裁剪字符串中的空格和换行符,将得到的结过进行isEmpty
            var isReBlank:Bool{
                let str = self.trimmingCharacters(in: .whitespacesAndNewlines)
                return str.isEmpty
            }
        

        eg. 如果text = " ",经过trimmingCharacters处理后变为text = "",再调用isEmpty,判定字符串为空

    相关文章

      网友评论

        本文标题:Swift中如何判断字符是否为空串

        本文链接:https://www.haomeiwen.com/subject/ehrzgltx.html