屹砾

屹砾技术博客,记录生活点滴。
Email/QQ/MSN/GTalk: eli.wuhan@gmail.com

留言簿

积分与排名

Growing & Life

JavaSE & JavaEE

Linux & Unix

时事点评

阅读排行榜

评论排行榜

字符串比较器,用来对包含数字的字符串进行排序

写了一个字符串比较器,用来对包含数字的字符串进行排序。
package eli.comparator;

import java.util.Comparator;

/**
 * 字符串比较类。对包含非数字的字符串进行比较。
 * 
 * 
@author <a href="mailto:eli.wuhan@gmail.com">屹砾</a>
 
*/

public class NumberComparator implements Comparator<String> {
    
private boolean ignoreCase = true;

    
public NumberComparator() {
    }


    
public NumberComparator(boolean ignoreCase) {
        
this.ignoreCase = ignoreCase;
    }


    
public int compare(String o1, String o2) {
        
if (ignoreCase) {
            o1 
= o1.toLowerCase();
            o2 
= o2.toLowerCase();
        }

        
for (int i = 0; i < o1.length(); i++{
            
if (i == o1.length() && i < o2.length()) {
                
return -1;
            }
 else if (i == o2.length() && i < o1.length()) {
                
return 1;
            }

            
char ch1 = o1.charAt(i);
            
char ch2 = o2.charAt(i);
            
if (ch1 >= '0' && ch2 <= '9'{
                
int i1 = getNumber(o1.substring(i));
                
int i2 = getNumber(o2.substring(i));
                
if (i1 == i2) {
                    
continue;
                }
 else {
                    
return i1 - i2;
                }

            }
 else if (ch1 != ch2) {
                
return ch1 - ch2;
            }

        }

        
return 0;
    }


    
private int getNumber(String str) {
        
int num = Integer.MAX_VALUE;
        
int bits = 0;
        
for (int i = 0; i < str.length(); i++{
            
if (str.charAt(i) >= '0' && str.charAt(i) <= '9'{
                bits
++;
            }
 else {
                
break;
            }

        }

        
if (bits > 0{
            num 
= Integer.parseInt(str.substring(0, bits));
        }

        
return num;
    }

}

测试文件。
package eli.comparator;

import java.io.File;
import java.io.FileFilter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;

import sun.security.krb5.internal.p;

import eli.arithmetic.comparator.NumberComparator;

import junit.framework.TestCase;

public class Sort extends TestCase {
    
public void testFile() {
        List
<String> list = new ArrayList<String>(0);
        File folder 
= new File("E:/(API文档)");
        File[] files 
= folder.listFiles(new FileFilter() {
            
public boolean accept(File pathname) {
                
return pathname.isFile();
            }

        }
);
        
for (int i = 0; i < files.length; i++{
            list.add(files[i].getName());
        }

        Collections.sort(list, 
new NumberComparator());
        
for (int i = 0; i < list.size(); i++{
            System.out.println(list.get(i));
        }

    }

}
测试结果:
_.txt
_1.txt
_12.txt
acegi.chm
arcobjects.chm
c3p0
-0.9.1.2.jar
css20.chm
dbcp
-1.2.2-Api.chm
Falcon.txt
Hibernate3.1API.chm
iBATIS
-2.3.0.677-Api.chm
iBATIS
-2.3.0.677-User-Api.chm
J2EE1.4API.chm
J2SE5.0API规范.chm
jbpm.chm
JEE
-5.0-API.chm
jee
-dev.iso
jse
-core.iso
JSF1.1API.chm
JSF
-TagLib.chm
MySQL5.1参考手册.chm
MySQL
-6.0-Reference-Manual.chm
Spring1.
2.8API.chm
Spring2.0API.chm
Spring2.1API.chm
Spring开发参考手册.chm
SqlMapTransactionDaoTemplate.java
Struts1.1API.chm
VistaLE.jpg
文档List性能.txt

posted on 2008-06-16 20:19 屹砾 阅读(1085) 评论(0)  编辑  收藏 所属分类: JavaSE


标题  
姓名  
主页
验证码 *  
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-06-25 20:25 编辑过
 
成果网帮您增加网站收入
 
相关链接:
网站导航: