根据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");
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. 如果长度相等,再按字符串比较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"));
}
}
并且不能进行转换,因为不能保证文件名没有其它字符和长度.
从高位依次按char比较就可以了.不用做任务转换,并且还能比较字母和中文
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);
}
}
}
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() );
}
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);
}
}
}运行结果: