字符串 数组排序问题 求教

yiyang0925 2014-12-18 06:56:43
我获取一个文件夹下的文件名称,Arrays.sort() 排序后为什么,和windows的排序规则不同?需求是要按照windows中的排序(按名称 递增);如图:
...全文
188 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
WayneXuan 2014-12-18
  • 打赏
  • 举报
回复
需要写一个比较器实现windows的排序算法,具体不清楚,但大概应该是这个样子的

import java.util.Comparator;
public class NumberComparator<T extends String> implements Comparator {
	@Override
	public int compare(Object o1, Object o2) {
		String str1 = (String) o1, str2 = (String) o2;
		char[] arr1 = str1.toCharArray();
		char[] arr2 = str2.toCharArray();
		int len1 = arr1.length, len2 = arr2.length;
		int len = len1 < len2 ? len1 : len2;
		int diff = 0;
		boolean allIs=false;
		for (int i = 0; i < len; i++) {
			boolean is1 = isDigit(arr1[i]);
			boolean is2 = isDigit(arr2[i]);
			if (diff == 0) {
				diff = arr1[i] - arr2[i];
			}
			if (!is1 && !is2) {
				if (diff != 0) {
					return diff;
				}
				allIs=false;
			} else if (is1 && is2) {
				allIs=true;
			} else if (is1) {
				if (allIs) {
					return 1;
				}
				return diff;
			} else if (is2) {
				if (allIs) {
					return -1;
				}
				return diff;
			}
		}
		if (allIs) {
			if (len1==len2) {
				return diff;
			}
			return len1 - len2;
		}
		return diff;
	}

	private boolean isDigit(char c) {
		return c>='0'&&c<='9';
	}
}
然后

		List<String> list=Arrays.asList(pics);
		list.sort(new NumberComparator<String>());
		for (String f : list) {
			System.out.println(f);
		}
yiyang0925 2014-12-18
  • 打赏
  • 举报
回复
想死的心都有了;用compareTo() 冒泡排了一下和sort结果一样;windows 这按名称 递增 到底 什么排序方式啊?

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧