iOS:字符串過濾掉非法字符
(2013-11-30 13:17:00)
標簽: it
分類: 技術iOS
這篇總結要說的問題其實并不難,單純就是為了總結下思路。
比如有一個字符串叫tempString,包含有一些非法字符并不是我們想要的,這個tempString如下:+86 150-1111-1234#,再復雜點可能是(010)(123)E6(234)*150-1111-^^-1234#等。
在應用中我們僅僅是想保留下字符串里的數字,括號、百分號等這些非數字的符號就得過濾掉。過濾的方法有很多種??梢詫⑦@個字符串從頭到尾掃描一遍,遇到非法字符就剔除掉。也可以用替代方法。
這里簡單說兩種。
第一種就是替代法。
使用stringByReplacingOccurrencesOfString這個方法將字符串里的非法字符逐個替代。
具體如下:
1:tempString = [tempString stringByReplacingOccurrencesOfString:@" "withString:@""];
2:tempString = [tempString stringByReplacingOccurrencesOfString:@"#"withString:@""];
3:tempString = [tempString stringByReplacingOccurrencesOfString:@"*"withString:@""];
4:tempString = [tempString stringByReplacingOccurrencesOfString:@"+"withString:@""];
5:tempString = [tempString stringByReplacingOccurrencesOfString:@"-"withString:@""];
...
這樣做比較煩的一個問題就是,如果要過濾掉的非法字符有很多的話,就得寫多行這種替代代碼。
另外一種方法比較巧妙,先將字符串按非法字符集進行截斷最后再拼接起來。代碼看起來很簡直,直接了斷。
具體如下:
1:NSCharacterSet *doNotWant = [NSCharacterSet characterSetWithCharactersInString:@"[]{}(#%-*+=_)\\|~(<>$%^&*)_+ "];
2:tempString = [[tempString componentsSeparatedByCharactersInSet: doNotWant]componentsJoinedByString:@""];
在doNotWant這個字符集里想寫幾個就寫幾個。
另外不能用stringByTrimmingCharactersInSet這個方法進行過濾,它能做到的僅僅是把字符串兩端的非法字符過濾,但是包含在字符串里非法字符則無能為力。