有这么一个小事:
DB表里的一个字段存着类似这样的数据">=100",">25","=123",现在要求在Java取出后把那些比较运算符后的数字取出来,比如说">=100"取出"100"来,
">123"取出"123"来.
简单想了想,觉得用subString有些麻烦,
还得借助indexOf去得到比较运算符的位置,这样也就意味着另写一个方法,这个方法直接放在model类里很ugly放到commonUtil里吧还得再把那个文件也检出...
麻烦!(这时想到了apache的StringUtils啊,不过由于是急活也没埋时间去看StringUtils下的方法),
转念想到了split方法.于是有了如下实现:
public String getRealValue(){
if(descText == null){
return "";
}
if(descText.startsWith(">=")){
return
descText.split(">=")[1];
}else
if(descText.startsWith(">")){
return
descText.split(">")[1];
}else
if(descText.startsWith("=")){
return
descText.split("=")[1];
}else{
return
"";
}
}
现在手头没什么急活了, 就回过头来再看看这个问题.
这次从apache的StringUtils看起.
从API里看到如下的方法: IsEmpty, IndexOf, Substring等方法,
接下来看到的substringAfter方法吸引了我的注意,这不正好符合我的问题嘛.
再看它的源码:
public static
String substringAfter(String str, String separator) {
if
(isEmpty(str)) {
return str;
}
if
(separator == null) {
return EMPTY;
}
int
pos = str.indexOf(separator);
if (pos == -1) {
return
EMPTY;
}
return str.substring(pos +
separator.length());
}
用的方法也就是先通过indexOf再以subString来取得最终结果.
这个方法里为什么没像我那样用split呢?
用split有什么不好?带着这种疑问我看了String中split方法的实现:
public String[] split(String
regex, int limit) {
return Pattern.compile(regex).split(this, limit);
}
My God! 差老多了, 这不是杀鸡用了牛刀!
从代码量来看:new
Pattern(compile方法里调用)里有15行的实现,split方法里又有35行的实现.
这时感觉到了代码行数也是对一个算法高效与否的粗略判断.
再往下追, compile方法里有new Pattern(regex, 0);
而在split里又有ArrayList matchList = new ArrayList();
我们知道new一个新的对象JVM是做不少额外开销的.
而反看substringAfter里用到的两个方法indexOf和substring,全都是char数组的操作.
这样一比较发现,
split与substringAfter在算法复杂度上的差别要比用牛刀来杀鸡夸张多了.
分享到:
相关推荐
只是感觉它的功能过于强大,如果不是用在大项目上有点杀鸡用牛刀的感觉。 于是就想找个替代品,然后就发现了NPOI。下载类库来使用了一下,生成Excel的速度还是挺快的。去了解了下这个类库,它是POI项目的.NET 版本...
Dapper是一款轻量级ORM工具(Github)。如果你在小的项目中,使用Entity Framework、NHibernate 来处理大数据访问及关系映射,未免有点杀鸡用牛刀。你又觉得ORM省时省力,这时Dapper 将是你不二的选择。
Dapper是一款轻量级ORM工具(Github)。如果你在小的项目中,使用Entity Framework、NHibernate 来处理大数据访问及关系映射,未免有点杀鸡用牛刀。你又觉得ORM省时省力,这时Dapper 将是你不二的选择。
Dapper是一款轻量级ORM工具。如果你在小的项目中,使用Entity Framework、NHibernate来处理大数据访问及关系映射,未免有点杀鸡用牛刀。你又觉得ORM省时省力,这时Dapper将是你的不二选择。这里提供了Dapper源码。
小项目有时需要用到关键词搜索相关性排序,用sphinx显得杀鸡用牛刀,就用mysql的order by对付下。方法一: 代码如下:select * from articles where (title LIKE ‘%keywords%’) or (content LIKE ‘%helloworld%’)...
其实STB的由来很简单,以前一直用DZ/PW建论坛,在使用过程中发现他们的体积和逻辑关系太复杂了,光数据库里就有几十个关系表,对于做一个小网站来说,有点杀鸡用宰牛刀的感觉,并且备份也麻烦。所以就自己写了一个...
分享给大家供大家参考,具体如下: ...由于采用简单的数据分析,只是Host一个简单的web Server,所以本人不喜欢Tomcat,IIS这类大型工具,显得有点杀鸡用牛刀,班门弄斧。我更喜欢node.js这类简易的we
如果你在小的项目中,使用Entity Framework、NHibernate 来处理大数据访问及关系映射,未免有点杀鸡用牛刀。你又觉得ORM省时省力,这时Dapper 将是你不二的选择。 对象关系映射(ORM)已经被使用了很长时间,以解决...
关于组件通信我相信小伙伴们肯定也都很熟悉,就不多说了,对组件通信还不熟悉的小...不过如果项目不是很大,状态管理也没有很复杂的话,使用 Vuex 有种杀鸡用牛刀的感觉,当然,这也是要根据自己的需求来的,只是建议
其次,使用RDB还有一个问题:数据的层次表达与多值问题,将树型数据扁平化存储的方案是有的,但是,将几层简单的节点拆分成N个表格,岂不是杀鸡用牛刀? 其次的考虑当然是XML,然而XML是基于可读文本的,如何解决二...
对于他们目前的项目来说有点“杀鸡用牛刀”的意思,因为他们的项目不需要文件传送、不需要P2P、不存在好友关系、也不存在组广播、不需要服务器均衡、不需要跨服务器通信、甚至都不需要使用UserID,只要客户端能与...
在性能方面拥有微型ORM之王的美誉,几乎与原生ADO.NET数据读取器一样快,如果你在小的项目中使用Entity Framework、NHibernate等框架来处理大数据访问及关系映射,未免有点杀鸡用牛刀,你又觉得ORM省时省力,这时...
对于ASP.NET 1.x里要动态显示Bulledted List时,要么自己利用HTML的或元素构造,要么就是“杀鸡用牛刀”的动用Repeater来显示。前者过于死板,后者过于Overkill,也许微软听到这种声音,于是ASP.NET 2.0总算搞了个...
当时的想法是新建一张表来储存设置的时间,但总有杀鸡用牛刀的感觉。后来工头提醒项目已经有了redis,那就物尽其用,就被叫去做redis实现数据缓存功能。 好在redis提供了java客户端开发包,名曰jedis,下星期会比较...
特别是在小型企事业单位中,使用大型软件系统往往是过度复杂且成本高昂,相当于“杀鸡用牛刀”。因此,开发一款针对小型企业的简单人事管理系统显得尤为必要。 本系统旨在满足小型企业对于员工基本信息管理的需求,...
首先,最大的问题是最流行的几个插件都依赖 jQuery,这意味着在使用 React 或者 Vue 的项目中使用他们是一件十分蛋疼的事:我只需要一个全屏滚动功能,却还需要把 jQuery 引入,有种杀鸡使用宰牛刀的感觉;
对话中提到,过度使用或滥用OOP可能导致设计的复杂性和混乱,尤其是当用OOP来设计组件时,可能会显得过于冗余,即所谓的“杀鸡用牛刀”。 2. **通用编程 (GP)**: GP 是一种编程风格,它的目标是创建可重用的代码...
UICollectionView 可以解决各种布局难题,但是稍显复杂,对于一些简单的需求,有点杀鸡用牛刀的感觉。 在 iOS6 以前,还没有 UICollectionView,为了实现横向滚动的 UITableView,只有自己动手写组件。为了达到和 ...
然而,在一些中小型项目中,引入一个大型的JavaScript库可能显得有些“杀鸡用牛刀”,特别是在只需要一两个特定特效的情况下。因此,本文将探讨如何创建一个简洁、高效且功能完善的JavaScript效果库。 #### 基础...