存档

2009年12月 的存档

南京中山东路长满“眼”

2009年12月12日 595 views 1 条评论

公司班车22:00到达了南京安德门地铁站。

地铁至新街口德基广场出站,的哥蛮不情愿搭我们上车。

一路聊下来终于发现内因:原来中山东路长满,电眼反应速度之快,稍不留神就会被抓罚上¥200。

ps:七天连锁环境、管理还算满意。

分类: 日志 标签:

代码:比较两个版本大小

2009年12月3日 507 views 2 条评论

最近项目需要写段代码来做版本的比较,需求大致是:
版本号一般是四位,如 1.0.0.10p7(也可能会少几位),要求比较版本的 先后/大小 关系从而进行一些处理。

刚开始觉得是一个非常常用的功能,应该在很多地方都有现成实现的。但是找了一些开源的项目以后,都没有找到合适的。

像 Maven 里面是也有关于版本判断的代码,但是过于复杂,有好多个类。而我是想最好能有一个函数,把两个版本传进去,告诉我比较的结果就好了。

找不到,于是自己写了个,能满足我的要求了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
	private static final Pattern PATTERN_DIGI_VERSION  = Pattern.compile("([\\d\\.]+)([abp]\\d+)?");
 
        ...
 
	/**
	 * Compare two version strings, such as 1.0.0.10p7 and 1.0.0.20
	 * 
	 * @param lv, the left version string to be compared
	 * @param rv, the right version string to be compared
	 * @return, 1 if lv>rv; 0 if lv==rv; -1 if lv<rv
	 */
	public static int compareVersion( String lv, String rv ) {
		String[] lvs = lv.split("\\.");
		String[] rvs = rv.split("\\.");
 
		int lmin = Math.min(lvs.length, rvs.length);
 
		for ( int i=0; i<lmin; i++ ) {
			Matcher lmatch = PATTERN_DIGI_VERSION.matcher(lvs[i]);
			Matcher rmatch = PATTERN_DIGI_VERSION.matcher(rvs[i]);
			if ( lmatch.matches() ) {
				int lv1 = Integer.valueOf(lmatch.group(1));
				String strlv2 = lmatch.group(2);
 
				if ( rmatch.matches() ) {
					int rv1 = Integer.valueOf(rmatch.group(1));
					String strrv2 = rmatch.group(2);
 
					if ( lv1 > rv1 ) return 1;
					else if ( lv1 < rv1 ) return -1;
					else {
						// compare to minor version, such a, b, p1, p3, etc. 
						if ( strlv2 == null || strlv2.length()==0 ) {
							if ( strrv2 != null && strrv2.length() !=0 ) return -1;
						} else {
							if ( strrv2 == null || strrv2.length() == 0 ) return 1;
							else {
								String wlv = strlv2.substring(0, 1);
								int lv2 = strlv2 == null ? -1 : Integer.valueOf(strlv2.substring(1));
 
								String wrv = strrv2.substring(0, 1);
								int rv2 = strrv2 == null ? -1 : Integer.valueOf(strrv2.substring(1));
 
								// compare small version string first, such as 'a', 'b', 'p'
								if ( wlv.compareTo(wrv) > 0 ) return 1;
								else if ( wlv.compareTo(wrv) < 0 ) return -1;
								else {
									if ( lv2 > rv2 ) return 1;
									else if ( lv2 < rv2 ) return -1;
								}
							}
						}
					}
				} else {
					return 1;
				}
			} else {
				return -1;
			}
		}
 
		if ( lmin < lvs.length ) return 1;
		else if ( lmin == lvs.length && lmin == rvs.length ) return 0;
		else return -1;
	}


分类: 技术 标签:

除草日

2009年12月2日 589 views 没有评论

最近忙家事,这片小花园有段日子没功夫打理了。

今儿20091202过来除个草,浇个水

自从免费空间在10月除出了问题,等了半个月才恢复之后,在这里码字的热情也一下子淡了很多。再加上接下来的一段时间事情也比较多,所以很久都没有更新文章了。

接下来要准备重新开张了,要坚持啊!


分类: 日志 标签: