美文网首页
关于iOS中双引号的神坑

关于iOS中双引号的神坑

作者: 戈多_于勒 | 来源:发表于2018-09-07 15:35 被阅读38次

    问题描述:

    项目中,

    1.textView的text必须不能以"开头,否则后台数据库会报error.

    所以针对这情况,前端需要自行处理,用户输入的字符串不能以"开头。如果以"开头就删掉。

    针对已经有双引号开头的字符串:

     NSString *oneStr;

       if (textView.text.length >0) {

               oneStr = [NSString stringWithFormat:@"%@",[textView.text substringToIndex:1]];

                if ([oneStr isEqualToString:@"\""] || [oneStr isEqualToString:@"\“"]) {

                          textView.text = [textView.text substringFromIndex:1];

           }    

    }

    针对开头输入的双引号:

     if (textView.text.length == 0 && string.length > 0) {//first char

             oneStr = [NSString stringWithFormat:@"%@",[string substringToIndex:1]];

             if ([oneStr isEqualToString:@"\""] || [oneStr isEqualToString:@"\“"]) {

                        string = [string substringFromIndex:1];

                         return NO;

                 }

    }

    神坑就出现在调试的时候,用iPad输入”测试的时候,一直不会走第二段逻辑。

    果断打断点用Po调试:

    为啥false

    这双引号看着都一样,可问啥就是不会进入此分支呢?

    是不是中文的双引号有啥问题呢?继续测:

    中文左右双引号

    将log拷贝到其他编辑器中:

    (lldb) po [textView.text subString:24 toIndex:25];

    (lldb) po [textView.text subString:25 toIndex:26];

    瞬间了然。

    其实造成这个困惑的主要原因是Xcode中,中文输入法看起来不区分“”,如图:

    Xcode中的双引号

    鲁迅说过:搞清楚问题是解决问题的一半!

    最终版本:

    数组“”

    为啥数组的后两个元素看着一样呢???  默念三遍:绝对不一样,绝对不一样,绝对不一样!以下为证:

     NSString*oneStr;

     NSArray*specialArray =@[@"\"",@"”",@"“"];//chinaChar” “

      if(textView.text.length>0) {

                textView.text = [textView.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];

                oneStr = [NSStringstringWithFormat:@"%@",[textView.textsubstringToIndex:1]];  

                 if([specialArraycontainsObject:oneStr]) {

                         textView.text= [textView.textsubstringFromIndex:1];

                 }

       }

     if (range.location == 0 && string.length > 0) {

              if(string.length>0) {

                         oneStr = [NSStringstringWithFormat:@"%@",[stringsubstringToIndex:1]];

                         if([specialArraycontainsObject:oneStr]) {

                                    string = [stringsubstringFromIndex:1];

                         returnNO;

                  }

            }

    }

    总结:

    1.在用subStringtoIndex:方法之前,最好去除一下String开头的空格,因为用户可能会无意中多输入一个空格。

    2.如何定位textView中的是首个字符?应该用range.location == 0来判断,而不是textView.text.length == 0。因为用户完全可能手动移动光标。

    相关文章

      网友评论

          本文标题:关于iOS中双引号的神坑

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