需求
把课程的目录列出来,发到网站上。
分析
传统手工法,一个一个重命名,按F2,复制粘贴。
可是我们是程序员呀!当然不能这么干!
import java.io.*;
import java.util.*;
class FileList{
public static void main(String[] args){
File file = new File("./");
File[] filesNames = file.listFiles();
List<File> fileList = Arrays.asList(filesNames);
for(int i = 0;i<fileList.size();i++){
File item = fileList.get(i);
System.out.println(item.getName());
}
}
}
但是这样弄出来是啥?
这样子的顺序
于是乎,改进一下吧,加个排序
import java.io.*;
import java.util.*;
class FileList{
public static void main(String[] args){
File file = new File("./");
File[] filesNames = file.listFiles();
List<File> fileList = Arrays.asList(filesNames);
List<String> fileNameList = new ArrayList();
for(int i = 0;i<fileList.size();i++){
File item = fileList.get(i);
fileNameList.add(item.getName());
}
Collections.sort(fileNameList,new NaturalOrderComparator<String>(true));
for(int i = 0;i < fileNameList.size();i++){
System.out.println(fileNameList.get(i));
}
}
}
class NaturalOrderComparator<T> implements Comparator<T>
{
public static final Comparator<String> NUMERICAL_ORDER = new NaturalOrderComparator<String>(false);
public static final Comparator<String> CASEINSENSITIVE_NUMERICAL_ORDER = new NaturalOrderComparator<String>(true);
private final boolean caseInsensitive;
public NaturalOrderComparator(boolean caseInsensitive) {
this.caseInsensitive = caseInsensitive;
}
int compareRight(String a, String b) {
int bias = 0;
int ia = 0;
int ib = 0;
// The longest run of digits wins. That aside, the greatest
// value wins, but we can't know that it will until we've scanned
// both numbers to know that they have the same magnitude, so we
// remember it in BIAS.
for (;; ia++, ib++) {
char ca = charAt(a, ia);
char cb = charAt(b, ib);
if (!Character.isDigit(ca) && !Character.isDigit(cb)) {
return bias;
}
else if (!Character.isDigit(ca)) {
return -1;
}
else if (!Character.isDigit(cb)) {
return +1;
}
else if (ca < cb) {
if (bias == 0) {
bias = -1;
}
}
else if (ca > cb) {
if (bias == 0)
bias = +1;
}
else if (ca == 0 && cb == 0) {
return bias;
}
}
}
public int compare(T o1, T o2) {
String a = o1.toString();
String b = o2.toString();
int ia = 0, ib = 0;
int nza = 0, nzb = 0;
char ca, cb;
int result;
while (true) {
// only count the number of zeroes leading the last number compared
nza = nzb = 0;
ca = charAt(a, ia);
cb = charAt(b, ib);
// skip over leading zeros
while (ca == '0') {
if (ca == '0') {
nza++;
}
else {
// only count consecutive zeroes
nza = 0;
}
// if the next character isn't a digit, then we've had a run of only zeros
// we still need to treat this as a 0 for comparison purposes
if (!Character.isDigit(charAt(a, ia + 1)))
break;
ca = charAt(a, ++ia);
}
while (cb == '0') {
if (cb == '0') {
nzb++;
}
else {
// only count consecutive zeroes
nzb = 0;
}
// if the next character isn't a digit, then we've had a run of only zeros
// we still need to treat this as a 0 for comparison purposes
if (!Character.isDigit(charAt(b, ib + 1)))
break;
cb = charAt(b, ++ib);
}
// process run of digits
if (Character.isDigit(ca) && Character.isDigit(cb)) {
if ((result = compareRight(a.substring(ia), b.substring(ib))) != 0) {
return result;
}
}
if (ca == 0 && cb == 0) {
// The strings compare the same. Perhaps the caller
// will want to call strcmp to break the tie.
return nza - nzb;
}
if (ca < cb) {
return -1;
}
else if (ca > cb) {
return +1;
}
++ia;
++ib;
}
}
private char charAt(String s, int i) {
if (i >= s.length()) {
return 0;
}
else {
return caseInsensitive ? Character.toUpperCase(s.charAt(i)) : s.charAt(i);
}
}
}
- 1、【领券联盟前端版】课程介绍.avi
- 2、【领券联盟web版】开发环境搭建介绍.avi
- 3、【领券联盟web版】项目创建.avi
- 4、【领券联盟web版】导入ElementUI.avi
- 5、【领券联盟web版】编写头部公共部分.avi
- 6、【领券联盟web版】编写底部公共部分.avi
- 7、【领券联盟web版】添加axios依赖.avi
- 8、【领券联盟web版】对网路哦请求进行封装.avi
- 9、【领券联盟web版】渲染首页的分类菜单.avi
- 10、【领券联盟web版本】请求首页对应分类的商品.avi
- 11、【领券联盟web版】显示首页推荐内容.avi
- 12、【领券联盟web版】跳转到领券页面.avi
- 13、【领券联盟web版】渲染优惠信息以及当前分类.avi
- 14、【领券联盟web版】设置首页分类的点击事件.avi
- 15、【领券联盟web版】解决nuxt.js跨域问题.avi
- 16、【领券联盟web版】解决首页切换分类的问题.avi
- 17、【领券联盟web版】添加回到顶部已经让首页菜单悬浮.avi
- 18、【领券联盟web版】回到顶部实现.avi
- 19、【领券联盟web版】让图片的加载速度更快.avi
- 20、【领券联盟web版】搭建发现页结构.avi
- 21、【领券联盟web版】获取发现页的分类数据.avi
- 22、【领券联盟web版】发现页分类样式修改.avi
- 23、【领券联盟web版】获取发现页面推荐列表.avi
- 24、【领券联盟web版】渲染发现页列表内容.avi
- 25、【领券联盟web版】调整发现页中间列表的样式.avi
- 26、【领券联盟web版】实现发现页面的轮播图.avi
- 27、【领券联盟web版】发现页面让菜单和轮播图悬浮.avi
- 28、【领券联盟web版】发现也加载更多功能实现.avi
- 29、【领券联盟web版】发现页面加载更多的loading状态以及图片加载优化.avi
- 30、【领券联盟web版】发现页加载其他分类内容.avi
- 31、【领券联盟web版】修改顶部导航tab的选中状态.avi
- 32、【领券联盟web版】跳转到特惠页面.avi
- 33、【领券联盟web版】请求特惠界面的数据.avi
- 34、【领券联盟web版】渲染特惠页面的数据.avi
- 35、【领券联盟web版】调整特惠页面的样式.avi
- 36、【领券联盟web版】特惠去获取优惠券.avi
- 37、【领券联盟web版】特惠页面加载更多内容.avi
- 38、【领券联盟web版】补充发现页面的回到顶部功能.avi
- 39、【领券联盟web版】跳转到搜索页面.avi
- 40、【领券联盟web版】携带参数跳转到搜索页面.avi
- 41、【领券联盟web版】获取搜索相关的数据.avi
- 42、【领券联盟web版】渲染搜索结果.avi
- 43、【领券联盟web版】调整搜索结果样式.avi
- 44、【领券联盟web版】解决搜索一些bugs.avi
- 45、【领券联盟web版】搜索加载更多内容.avi
- 46、【领券联盟web版】docker安装.avi
- 47、【领券联盟web版】docker镜像三要素.avi
- 48、【领券联盟web版】docker创建Nginx容器.avi
- 49、【领券联盟web版】构建领券联盟的docker镜像.avi
- 50、【领券联盟web版】通过Nginx设置负载均衡.avi
- 51、【领券联盟web版】配置Nuxt的404页面.avi
- 52、【领券联盟web版】生成二维码.avi
- 53、【领券联盟web版】设置二维码的内容.avi
-
54、【领券联盟web版】设置seo信息.avi
广告一下此课程地址: