• 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类型都毫无压力了吧,其实什么类型方法都成了浮云。传说中的境界……

  • 相关阅读:
    java降序排列
    冒泡排序-java
    redis-并发竞争问题
    超卖问题
    算法-题目汇总-6
    算法-题目汇总-4
    算法-题目汇总-1
    算法-二分查找-1
    算法-bst-平衡搜索二叉树-1
    算法-位运算-1
  • 原文地址:https://www.cnblogs.com/net2012/p/3227625.html
Copyright © 2020-2023  润新知