如果你这么大的数的话,可以使用BigDecimal试试。

解决方案 »

  1.   

    参考如下:
    BigDecimal tmp = new BigDecimal(0);
    BigDecimal sublong = new BigDecimal(0);

    DecimalFormat df = new DecimalFormat();
    df.setParseBigDecimal(true);
    for(String str : strArray){
                //这段代码是个隐患,可能会引发错误                                        
                //sublong = Long.parseLong(str.substring(0, str.indexOf('.')));
    sublong = (BigDecimal)df.parse(str.substring(0, str.indexOf('.')));
    map.put(sublong,str);

    if(sublong.compareTo(tmp) > 0){
    tmp = sublong;
    }
    }
      

  2.   

    1. 先比较长度,长度大的大
    2. 如果长度相等,再按字符串比较import java.util.Comparator;public class MyComparator implements Comparator<String> {
        public int compare(String str1, String str2) {
            return str1.length() == str2.length() ? str1.compareTo(str2) : (str1.length() - str2.length());
        }    public static void main(String[] args) {
            Comparator<String> comparator = new MyComparator();
            System.out.println(comparator.compare("0", "1"));
            System.out.println(comparator.compare("1", "2"));
            System.out.println(comparator.compare("2", "1000"));
            System.out.println(comparator.compare("1000", "1000"));
            System.out.println(comparator.compare("1000", "2"));
        }
    }
      

  3.   

    不能比较长度的,00000001比2长,但是比2小.
    并且不能进行转换,因为不能保证文件名没有其它字符和长度.
    从高位依次按char比较就可以了.不用做任务转换,并且还能比较字母和中文
      

  4.   

    比较前去掉前面的0: str = str.replaceAll("^0*(.+)$", "$1");
      

  5.   

    根据2楼的提示,如果使用按照我的这种思路,并且再结合BigInteger,倒是可以实现,代码如下,但是问题是这种方法(不管是用long还是BigInteger)的效率非常非常的低,效率低的原因就是备注的代码,因为要循环遍历从1到最大的那个数public class TestString {
    public static void main(String[] args){
    String[] strArray = {"1.jpg","100000000.gif","2.bmp"};
    Map map = new HashMap();
    BigInteger bi = new BigInteger("0");
    BigInteger tmp = new BigInteger("0");

    for(String str:strArray){
    bi = new BigInteger(str.substring(0,str.indexOf('.')));
    map.put(bi,str);
    if(bi.compareTo(tmp)==1){
    tmp = bi;
    }
    }

    BigInteger k = new BigInteger("1");
    BigInteger one = new BigInteger("1");

    //从1遍历到最大的那个数,中间不停地做无用功
    while(k.compareTo(tmp)<=0){
    if(map.get(k)!=null){
    System.out.println(map.get(k));
    }
    k = k.add(one);
    }
    }
    }
      

  6.   

    使用系统自带排序功能的TreeSet吧                Set<Integer> set = new TreeSet<Integer>();
    set.add(1);
    set.add(2000);
    set.add(11);
    set.add(10000);

    Iterator<Integer> itr = set.iterator();
    while( itr.hasNext() ){
    System.out.println( itr.next() );
    }
      

  7.   

    经过以上几位的指点,这个问题终于有了满意的答案,谢谢大家!代码如下:
    import java.math.BigInteger;
    import java.util.Map;
    import java.util.TreeMap;public class TestFileName {
    public static void main(String[] args){
    String[] strArray = {"2.jpg","1000000000000000000000000000000000000000000000000000000000000000000000000.gif","1.bmp","00000003.png"};
    Map<BigInteger,String> map = new TreeMap<BigInteger,String>();

    for(String str:strArray){
    BigInteger bi = new BigInteger(str.substring(0, str.indexOf('.')));
    map.put(bi, str);
    }

    for(String str:map.values()){
    System.out.println(str);
    }
    }
    }运行结果: