林子大了,什么鸟都有----.NET运用String的十八层境界

  在上一文中,提到了一句相当常见但十分荒谬的代码:Request.QueryString["id"].ToString()。突然涌起一个想法,为什么不总结一下不同层次.Net开发者如何运用string的呢?

  古往今来,文本处理一直是所有编程语言的最基础的功能,也是最核心最重要的功能。任何初学者,如果想学一门编程语言,都要面对大量的文本处理。而或许有一天,即使你成了大师级的人物,也不敢说自己驾驭文本处理的能力,就已登峰造极。对String理解和运用,应该可以很好地代表开发者的专业水平。

  写Request.QueryString["id"].ToString()的显然属于比较初级的层次,那么专业一点的层次有什么表现呢?在本文,就试图归纳划分一下这水平的层次或境界,并抓些现行给大家参考。

一、入门级

第一层

初涉江湖。String就是这样:string s =”abc”,带俩双引号这就是个String。有天分很快发现string还可以相加。

但是,一说到说什么引用类型?值类型?唉,我好模糊啊……

第二层

不变应万变。label1.Text = n,报错说类型不兼容?原来还要ToString()一下。于是吐丝准成了此类.Net程序员的必杀技,Request.QueryString[id].ToString()就是最常见的例子。

第三层

如鱼得水。学会用Convert.ToInt32之类方法转换字符串,转过去,转回来。

来挖挖坟,看看早期的.Net程序员就已十分专业: 如何把string解析为int? 好在初学C#时我没看到此文。

第四层

世界真奇妙。光个String类型就有这么多方法,这怎么记不住啊,每个都够研究个几天,比如 关于string.Join()的妙用与疑惑 、String.Substring()使用注意, 还有分析Trim、IndexOf、Split等等不逐一列举了,过去都是园子首页的常客。

(题外话:一下子都研究明白了生活就没意思了,经常惊叹下“原来还有这个”不是挺好的)

二、菜鸟级

第五层

听说了字符串不要+拼接,要用StringBuilder,不然效率太低。

这篇还不错,不过题目有点浮:彻底研究StringBuilder。StringBuilder要彻底研究还真不简单,不过除了极懒的一小撮外,基本算是普及了。

第六层

会用静态方法啦:比如String.IsNullOrEmpty,但是对String.Format方法,还是要纠结好久吧。要是你会String.Concat,会区别它与StringBuilder用的场合,恭喜你,你的水平离.Net社区牛人—老赵也就差一年多了( 重谈字符串连接性能 )。

第七层

ToString的格式输出,名堂真多:C代表钱,D代表整数,E是指数,F是小数,y是年,大写M是月,小写m是分钟……  这哪记得住?

其实,能记住前几种就不错了,知道用时去查就好(C# 格式化字符串)。尤其,要分清大MM和小mm的区别。只需三分钟,飞越第七层。

第八层

开始从多个场景,如文件中,取得字符串。了解很多该用String表示的东西,很多不是String的东西,心有灵犀一点通,告别了盲目的类型转换。

此层说深不深,可以一跳而过;说浅不浅。我们公司有个WebService项目超级规范,全部方法参数、全部返回的实体属性清一色的string类型。对读取文件,至今许多有多年开发经验同行的仍然云里雾里,应该也包括偶。一个博问中问题:请教200M大的TXT文件如何快速读取,有谁能迅速给出标准实现的?

三、上手级

第九层:

学会了翻转字符串,真的!恭喜,根据砖家定义,你已超越北大菜鸟级别了(为什么我要反对北大青鸟)。

第十层:

会用foreach遍历String中的字符,明白了编码方式决定字符串中的字符,是一个字节,还是两个或更多。

编码是个大学问,偶一看就晕,就这么凑合着过了吧。您力所能及的话,还是建议深入了解下:字符集和字符编码(Charset & Encoding)

第十一层:

开始从流中读取字符串,偶尔还会重写下ToString方法 (文件流转换为string )。

流是现代编程语言的最重要的基本对象模型,和String地位相当。接触了这两者之间的联系,对一门语言的认识开始立体起来。

第十二层:

处理的字符串工作日渐繁重,直到一天发现了正则表达式,腰不酸了,腿不疼了。

我看的是这种正则表达式30分钟入门教程,结果花了无数个30分钟,还是没入门。不过还是值的,确实有时候比写代码处理容易得多,甚至是救命稻草,此时更高端的我们都不会。

四、达人级

第十三层:

一日突然被问到:string a = “a”+ “b”分配了几次内存?

蒙了,String是什么,Immutable、引用类型、拘留池、程序域,概念大爆发开始了。

年前的面试经历(二) ,献丑一下,精彩的是评论。

第十四层:

见到不是一个字符串,而是对一组编码字节的引用,是所谓见山不是山。

[你必须知道的.NET]第二十二回 中的一段话 “string真是一个丰富而多彩的技术仓库,饱含了.NET技术中很多精髓与技巧"。

第十五层:

诸如BinaryReader(Writer)/StringReader(Writer),都已不在话下。

看老赵的随笔:浅谈字节序(Byte Order)及其相关操作。

第十六层:

开始在String类源代码中寻找疑问的答案。

.Net Discovery 系列之一--string从入门到精通

五、大师级

第十七层:

无招胜有招,这种境界,打自动机,写编译器,跟玩似的。

园中的脑袋,大概接近了此境界:自己动手开发编译器(一)编译器的模块化工程 。

第十八层:

见山还是山。重写个String类型都毫无压力了吧,其实什么类型方法都成了浮云。传说中的境界……

脑袋的级别再往上,或许变成了这样:

不要崇拜哥,哥只是传说。

转载于:https://www.cnblogs.com/shenzhenjia/archive/2011/07/29/2121601.html

林子大了,什么鸟都有----.NET运用String的十八层境界相关推荐

  1. 小学生学python到底能干什么-颤抖 | 小学生都开始学Python了,十年后你还有工作么?...

    原标题:颤抖 | 小学生都开始学Python了,十年后你还有工作么? 今 日 摘 要 AI火爆全球,Python技能需求达到174%!小学生已经开始学Python,还成为高考必备项目,十年后你还有工作 ...

  2. 美国Ivanpah太阳能发电站:飞经这里的鸟都被烧焦了

    上周,美国加利福尼亚的伊万帕(Ivanpah)塔式太阳能光热发电站上线.这个发电站虽然才刚刚上线,不过技术上已经是旧式的了,发电站背后基于支持的企业则已经在考虑对设备设施进行升级. 发电站周围有大量反 ...

  3. 笨鸟都没有先飞怎么办。。。

    笨鸟没有发现自己笨,也没有先飞怎么办? 还好,现在发现自己是笨鸟也不算太晚,那就要加倍的加油了. 以后要早起学习,就算加班回来晚,早点睡觉,第二天早上也能学习. 早睡早起,最终目标是5点起来.加油! ...

  4. 这个B站的外挂脚本太强大了,啥都能改!

    点击上方蓝色小字,关注"涛哥聊Python" 重磅干货,第一时间送达 来源:网罗灯下黑 B 站相信大家都不少刷,俺也一样,刷起来就上头,不过我更喜欢在大屏幕上看,效果自然不是手机小 ...

  5. 主攻文推荐攻守都有系统_第一百四十八章:攻守之间 - 足球神话 - 找小说网

     第一百四十八章:攻守之间 文子华是那种理智型的球员,知道见好就收. 他见到曲振已将足球传出并没有去拦截得球的陈侯东,而是左移到了曲振的身侧继续盯人防守. 当然,得球的陈侯东也好不到哪里去,这时在他 ...

  6. Java任何一个元素都可以转换成String类型

    实例 实例一: import static java.lang.Math.*; public class Test {public static void main(String [] args) { ...

  7. Java程序员从笨鸟到菜鸟之(八十八)跟我学jquery(四)JQuery框架操作元素的属性与样式

    在前面几篇博客中,我们初步了解了一下jQuery的好处,基本语法,还有一些基本函数,这是学习jquery的基础,在这篇博客中,我们一起来学习一下JQuery框架操作元素的属性与样式,在web开发中,修 ...

  8. Java程序员从笨鸟到菜鸟之(七十八)细谈Spring(七)spring之JDBC访问数据库及配置详解

    利用spring访问数据库是我们ssh程序中必不可少的步骤,在没有hibernate之前,我们一般都用jdbc访问数据库,所以用jdbc访问数据库必不可少的要进行一些配置,spring中为我们提供了访 ...

  9. Java程序员从笨鸟到菜鸟之(二十八)Javascript总结之语言基础

    JavaScript 脚本语言作为一门功能强大.使用范围较广的程序语言,其语言基础包括数据类型.变量.运算符.函数以及核心语句等内容.本篇文章主要介绍JavaScript 脚本语言的基础知识 一:基础 ...

最新文章

  1. Spring Boot 2.6 正式发布:循环依赖默认禁止、增加SameSite属性...
  2. 【ACM】杭电1141:Factstone Benchmark
  3. python控制结构(二)_Python学习手册之控制结构(二)
  4. 大数据学习(09)--Hadoop2.0介绍
  5. linux内核2.6.35编译过程
  6. 评测称IE8成内存消耗王 高出IE7一半 为火狐2倍
  7. html设置json请求头,当我想在zf2客户端代码中使用“application/json”时,接受请求标头是“text/html,application/xhtm ...(etc)”...
  8. 两个月新手的几点 storyboard 心得
  9. DOM的利用冒泡做的一个小程序
  10. 十六进制格式颜色转换成RGB格式颜色
  11. 软件项目工作量评估方法COSMIC重点笔记
  12. URP实现毛玻璃效果一
  13. 军犬舆情热点:千亿矿权案成立联合调查组;格力人均加薪1000元
  14. 微信支付--网页版-V3-(3)
  15. 学生个人网页设计作品 学生个人网页模板简单个人主页成品 个人网页制作 HTML学生个人网站作业设计
  16. java cause_Cause: java.lang.UnsupportedOperationException
  17. 关于烧饼游戏修改器的分析
  18. 人脸关键点检测综述(含论文、数据集、方法等)
  19. windows 技术篇-共享地址里的共享文件显示为灰色叉叉不可用问题原因及解决方法
  20. 知否为何要用李清照如梦令诗词当片名?这个解释,无力反驳

热门文章

  1. 几个最短路径算法Floyd、Dijkstra、Bellman-Ford、SPFA的比较
  2. javascript数字验证(转)
  3. 播撒汗水,收获希望!
  4. 一些sql 语句(行列转换等)
  5. 华为南太无线解决方案部梁旭阳_华为无线充电新专利:激光无线充电,替代传统半接触式...
  6. webpackjsonp 还原_具有催化CO2还原性能的非贵金属配合物的配体设计
  7. 为什么待办事项清单不管用
  8. 前端工业物联网开发(Electron + Typescript + Vue)
  9. 少儿编程150讲轻松学Scratch(二)-制作过马路小游戏
  10. php读取西门子plc_PLC对模拟量信号,是怎么进行处理的?