现有三个文件:1.jpg, 10000.gif, 2.bmp
现在我想对它们进行排序,排序的依据是按小数点前的数字大小排序,即得到如下效果:
1.jpg
2.bmp
10000.gif
我自己想了一个笨的办法,如下代码,基本可以实现,但是有一个问题,如果文件10000.gif换作1000000000000000000000000000000000.gif,那么就会出错,出错的原因就是注释的那段代码
请教大家一个好的办法来解决这个问题,谢谢
public class TestString {
public static void main(String[] args){
String[] strArray = {"1.jpg","10000.gif","2.bmp"};
Map map = new HashMap();
long tmp = 0;
long sublong = 0;
for(String str:strArray){
//这段代码是个隐患,可能会引发错误
sublong = Long.parseLong(str.substring(0, str.indexOf('.')));
map.put((sublong+""),str);
if(sublong>tmp){
tmp = sublong;
}
}
for(long i=1;i<=tmp;i++){
if(map.get(i+"")!=null){
System.out.println(map.get(i + ""));
}
}
}
}
------解决思路----------------------
如果你这么大的数的话,可以使用BigDecimal试试。
------解决思路----------------------
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"));
}
}
------解决思路----------------------
最简单的排序:冒泡排序
------解决思路----------------------
使用系统自带排序功能的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() );
}