资源描述:
《guava是个风火轮之基础工具(3)-java开发java经验技巧》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、Guava是个风火轮Z基础工具(3)-编程开发技术Guava是个风火轮之基础工具(3)原文出处:潘家邦的博客・、F4a刖5Guava是Java开发者的好朋友。虽然我在开发屮使用Guava很长时间了,GuavaAPI的身影遍及我写的生产代码的每个角落,但是我用到的功能只是Guava的功能集中一个少的可怜的真子集,更别说我一直没有吋间认真的去挖掘Guava的功能,没有时间去学习Guava的实现。直到最近,我开始阅读^GettingStartedwithGoogleGuava,感觉有必耍将我学习和使用Guava的一些东四记录下来。CharsetsCharsets是一个常量工厂,给出了6个九刖
2、承诺了全平台支持的字符集,类似的静态工厂在Apache的类库中也有提供。如果没有静态变量,我们要么使用Charset#forName方法,传入一个字符串来获取指定的字符集,要么自己定义一个类似的工厂类。使用CharsetWforName的问题就在于用户需要关注入参字符串的拼写,一旦拼写错误就会出现意料之外的事情。到了7中,JDK提供了一个官方的静态工厂类java.nio.charset.StandardCharsets,Guava也推荐使用Java7及以上的用户使用StandardCharsetsoStrings在Guava屮,以名词的复数形式命名的类,基本上都是静态工厂。String
3、s就是这么一个用来操作字符串的方法工厂。Strings提供了空指针、空字符串的判断和互换方法。Strings.isNullOrEmpty(,,,z);//trueStrings.nullToEmpty(null);//〃〃Strings・nullToEmpty(^a^);//"eTStrings・emptyToNull(““);//nullStrings.emptyToNull(,za/z);//〃/对于防御式编程,可以在拿到字符串入参之后,调用一下StringsttnullToEmpty将可能的空指针变成空字符串,然后也就不用担心字符串引发的NPE,或者字符串拼接吋候出现的“null
4、”了。Strings还提供了常见的字符申前后拼接同一个字符直到达到某个长度,或者重复拼接自身n次。Strings.padStart(〃7〃,3,'O');//"007"Strings.padStart("2010",3,'O');//〃2010"Strings.padEnd(z,4.〃,5,'O');//〃4・000〃Strings.padEndC,2010,/,3,'!');//〃2010〃Strings・repeat(,,hcy,/,3);//"hcyhcyhcy"Strings的最后一组功能是查找两个字符串的公共前缀、后缀。Strings.commonPrefix(,,aaab,
5、/,〃aac〃)Strings.commonSufIlx(aaac,aac);//aac源码分析源码來口Guava18.0oStrings类的源码大约240行,大部分的函数实现中规屮矩,值得关注的是Strings#repeato代码注释赫然写着,如果你修改了这里的代码,必须同步更新Benchmark!看来这段代码是经过极致优化了的,让我不禁想起当年楼教主比赛吋“我去上个测所,不要动键盘”的霸气。publicstaticStringrepeat(Stringstring,intcount){chcckNotNu11(string);//eagerforGWT・if(count<=1){c
6、heckArgument(count>二0,"invalidcount:%s〃,count);return(count==0)?〃〃:string;}//IFYOUMODIFYTHECODEHERE,youmustupdateStringsRcpcatBcnchmarkfinalintlen=string,length();finallonglongSize二(long)len*(long)count;finalintsize=(int)longSize;if(size!=IongSize){thrownewArrayIndcxOutOfBoundsExccption(''Requir
7、edarraysizetoolarge:"+longSize);}finalchar[]array=newchar[size];string.getChars(0,len,array,0);intn;for(n=len;n