Windows系统文件夹中的文件名排序

一天张三、李四的同事周五接到王哥的一个任务需求,有一个文件夹,里面有许多图片文件,网页访问某个分类展示文件的时候,王哥希望文件名的展示顺序可以按照Windows资源管理器中文件名升序排序的方式展示。

网站图片目录中有如下图片

1_rain.jpg
2_rain.jpg
3_rain.jpg
10_snow.jpg
11_snow.jpg
12_snow.jpg
7_wind1.jpg
7_wind2.jpg
8_wind.jpg
18_sky.jpg
18_sky_blue.jpg
boy1.jpg
boy2.jpg
1_girl1.jpg
1_girl2.jpg

在Windows文件夹中的升序展示顺序如下:
在这里插入图片描述周五看了看,心想这个调用java.io包中File.listFiles()方法,返回应该也是这个顺序吧,可是如果就这样是不是太简单了?

随后周五编码如下

void paixu(){String sucai = "d:\\sucai"File file = new File(sucai);File[] files = file.listFiles();for (int i = 0; i < files.length; i++) {System.out.println(files[i].getName());}
}

执行后输出顺序如下:
在这里插入图片描述
“果然和Windows的文件夹排序不一致,我就说王哥不能把这么简单的任务交给我。”

随后周五用搜索引擎找了好久,也找到了一个Java版本的例子,一个JavaScript版本的例子,但例子都说的模棱两可,还是没搞太明白,没能学以致用。只知道Windows的这种排序方式叫做natural order,自然序,这种排序看上去比较符合人类的直觉。

眼看这一天要下班了,他去找了同事张三,说明了自己的困难,张三帮他看了半天,思索了良久,说:“小五啊,不是你三哥不愿意帮你,实在是我水平有限……”

由于时间快下班了,周五有点着急,“我的好三哥,水平有限,你不早说,还在我这看半天”,

“你别急啊,我这不还没说完呢,李四,你四哥,他水平高,你去找他试试”

周五双手合十,“三哥,原谅我有些着急,我去找李四”

周五工位前,李四看着屏幕沉思着,

“怎么样?四哥,这个问题好解决吗?”
“嗯,也好,也不好”

“啊?好怎么理解,不好怎么理解。”

“你晚上请我吃饭,问题就好解决。你不请我吃饭,问题就不好解决。”

“晚饭我请了,地点你定,怎么样?”

“咱可得说话算数”

“一口吐沫一个钉”

说完,李四拿起键盘一顿输出,随后按下shift + F10运行。
控制台输出如下:

1_girl1.jpg
1_girl2.jpg
1_rain.jpg
2_rain.jpg
3_rain.jpg
7_wind1.jpg
7_wind2.jpg
8_wind.jpg
10_snow.jpg
11_snow.jpg
12_snow.jpg
18_sky.jpg
18_sky_blue.jpg
boy1.jpg
boy2.jpg

“行了,你跟Windows比比,看看是不是一样的”,李四说完起身回了自己工位。

周五仔细对比了一会儿,确实一模一样,一点毛病都没有。随后佩服的走到李四工位前,“四哥,你真是我亲哥,一会儿下班咱们走起!”

Comparator<String> naturalOrderComparator = new Comparator<String>() {@Overridepublic int compare(String s1, String s2) {int index1 = 0, index2 = 0;while (index1 < s1.length() && index2 < s2.length()) {char c1 = s1.charAt(index1);char c2 = s2.charAt(index2);if (Character.isDigit(c1) && Character.isDigit(c2)) {int num1 = 0, num2 = 0;while (index1 < s1.length() && Character.isDigit(s1.charAt(index1))) {num1 = num1 * 10 + s1.charAt(index1++) - '0';}while (index2 < s2.length() && Character.isDigit(s2.charAt(index2))) {num2 = num2 * 10 + s2.charAt(index2++) - '0';}if (num1!= num2) {return Integer.compare(num1, num2);}} else {if (c1!= c2) {return c1 - c2;}index1++;index2++;}}return s1.length() - s2.length();}};

周五将李四的代码总结好,找王哥review了代码push到仓库,网站的展示页面就生效了。

晚上周五请李四吃了顿大餐。后来周五发现,不止Windows系统,在日常用的Linux系统中文件夹中文件名的排序也是这样的顺序。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/147201.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

[Python学习日记-26] Python 中的文件操作

[Python学习日记-26] Python 中的文件操作 简介 操作模式 循环文件 其他功能 混合模式 修改文件 简介 在 Python 中的文件操作其实和我们平时使用的 Word 的操作是比较类似的&#xff0c;我们先说一下 Word 的操作流程&#xff0c;流程如下&#xff1a; 找到文件&#x…

鸿蒙开发项目中你是怎么理解生命周期?你知道的生命周期函数有那些, 说一下执行时机?(页面和自定义组件生命周期)

生命周期流程如下图所示&#xff0c;下图展示的是被Entry装饰的组件&#xff08;页面&#xff09;生命周期。 #一、怎么理解生命周期&#xff1f; 生命周期&#xff1a;简单点理解就是从创建到销毁的过程 #二、你知道的生命周期函数有那些, 说一下执行时机&#xff1f; 自定义…

前端框架的比较与选择详解

目录 引言 一、前端框架概述 1.1 什么是前端框架 1.2 为什么使用前端框架 二、主流前端框架比较 2.1 React 2.1.1 概述 2.1.2 特点 2.1.3 优点 2.1.4 缺点 2.1.5 适用场景 2.2 Angular 2.2.1 概述 2.2.2 特点 2.2.3 优点 2.2.4 缺点 2.2.5 适用场景 2.3 Vue.j…

石岩体育馆附近的免费停车场探寻

坐标&#xff1a;石岩体育馆侧的石清大道断头路, 如果运气好的话&#xff0c;遇到刚好有车开出的话&#xff0c;我觉得可以作为中长期的免费停车点 第一次路过的时候&#xff0c;把我震惊了&#xff0c;我一直以为石岩停车位紧张比市区还严重&#xff0c;因为石岩大部分为统建楼…

无人机视角电力巡检资产检测与异常判别数据集

无人机视角电力巡检资产检测与异常判别&#xff0c;资产检测关注17类目标&#xff0c;共10000余张无人机图像&#xff0c;json方式标注&#xff0c;类别如下&#xff1a; 1.Spiral Damper - 螺旋阻尼器 2.Stockbridge Damper - 斯托克布里奇阻尼器 3.Glass Insulator - 玻璃绝缘…

OpenStack Yoga版安装笔记(十三)neutron安装

1、官方文档 OpenStack Installation Guidehttps://docs.openstack.org/install-guide/ 本次安装是在Ubuntu 22.04上进行&#xff0c;基本按照OpenStack Installation Guide顺序执行&#xff0c;主要内容包括&#xff1a; 环境安装 &#xff08;已完成&#xff09;OpenStack…

【越学学糊涂的Linux系统】(1)Linux环境搭建|账户管理

Ⅰ. Linux环境&#xff1a; 0x00用什么去学习&#xff1a; Windows操作系统我们都不陌生&#xff0c;笔记本买过来了就装好了系统&#xff0c;现在我们要想使用Liunx操作系统该怎么办? ✨三种方法解决&#xff1a; ①直接安装在物理机上&#xff08;本电脑&#xff09;【❌…

上海市高等学校信息技术水平考试 C程序设计(2021A场)全解

2e-1 为 1.0^(-1)*2 在顺序查找法中&#xff0c;如果要从n个学生中找到某个特定的学生信息&#xff0c;最坏的情况是这个学生是最后一个被比较的&#xff0c;这时需要比较n次。但是&#xff0c;如果学生是均匀分布的&#xff0c;那么平均来说&#xff0c;你会在列表的中间找到这…

2024年最新Redis内存数据库主从复制、哨兵模式、集群部署等详细教程(更新中)

Centos 安装 Redis 检查安装 GCC 环境 [rootVM-4-17-centos ~]# gcc --version gcc (GCC) 8.5.0 20210514 (Red Hat 8.5.0-4) Copyright (C) 2018 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; no…

深入理解前端拖拽:从基础实现到事件冒泡与委托的应用【面试真题】

在前端开发中&#xff0c;拖拽功能是一项常见的交互需求。通过监听鼠标或触摸事件&#xff0c;用户可以拖动元素并将其放置到指定位置。理解拖拽的底层实现、如何判断拖拽的是子元素还是父元素&#xff0c;以及事件冒泡和事件委托的原理&#xff0c;可以帮助我们更好地实现复杂…

mybatis 和 mybatis-plus

mybatis 配置 1.新建MAVEN项目 2.配置mybatis依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocatio…

嵌入式面试学习笔记(入门1)

目录 指针的大小问题 sizeof和strlen C语言分配内存的方式 数组&#xff08;的&#xff09;指针和指针&#xff08;的&#xff09;数组 union 指针的大小问题 指针对于不少新手而言是一道难关&#xff0c;但是不必恐惧于指针。他的本质其实就是一个地址。请冷静下来仔细思…

人工智能开发实战辅助诊断应用解析

内容导读 项目分析预备知识项目实战 一、项目分析 1、提出问题 随着人们生活水平的提升和健康意识的增强&#xff0c;民众定期进行身体健康体检已成为常态&#xff0c;这种早期的疾病检测和筛查可以及早发现身体里已经出现的异常体征信息&#xff0c;做出正确诊断和有效处理…

信息安全数学基础(15)欧拉定理

前言 欧拉定理是数论中的一个重要定理&#xff0c;它建立了模运算下指数与模的互质关系。这个定理在密码学、信息安全等领域有着广泛的应用&#xff0c;特别是在公钥密码体制&#xff08;如RSA加密算法&#xff09;中。 一、表述 设 n 是一个正整数&#xff0c;a 是一个与 n 互…

万字长文——ConvNeXt(2022CVPR),卷积网络的顶峰之作,在Transformer盛行的当下,卷积网络还能再战!

ConvNext:A ConvNet for the 2020s ConvNext:2020 年代的卷积神经网络 论文地址: https://arxiv.org/pdf/2201.03545 自从Transformer成功应用在视觉领域并且取得显著成绩后,很多人开始抛弃卷积网络架构,转而使用Transformer。然而有的大佬不认为卷积过时了,于是有了这篇…

Sigmoid引发的梯度消失爆炸及ReLU引起的神经元参数失效问题思考

Sigmoid和ReLU激活函数思考&#xff09; 引文Sigmoid函数梯度消失问题梯度爆炸问题解决方案 ReLU函数简化模型示例场景设定前向传播对反向传播的影响总结 内容精简版 引文 梯度消失和梯度爆炸是神经网络训练中常见的两个问题&#xff0c;特别是在使用Sigmoid激活函数时。这些问…

图形化编程012(变量-倒计时)

案例展示 点击绿旗&#xff0c;使用空格键控制鳐鱼&#xff0c;按下空格向上游&#xff0c;松开下落。 在舞台右侧会出现障碍物从右向左移动&#xff0c;移动到左侧边缘发出声音并隐藏。 鳐鱼碰到障碍停止全部脚本&#xff0c;坚持60秒程序结束。 一、逻辑思维 通过读题将大…

鸿蒙媒体开发系列09——OpenSL ES音频录制

如果你也对鸿蒙开发感兴趣&#xff0c;加入“Harmony自习室”吧&#xff01;扫描下方名片&#xff0c;关注公众号&#xff0c;公众号更新更快&#xff0c;同时也有更多学习资料和技术讨论群。 1、概述 OpenSL ES全称为Open Sound Library for Embedded Systems&#xff0c;是一…

【我的 PWN 学习手札】tcache extend

目录 前言 一、利用手法 二、流程演示 &#xff08;1&#xff09;三块物理相邻的堆块 &#xff08;2&#xff09;溢出修改 size &#xff08;3&#xff09;释放该 chunk &#xff08;4&#xff09;重新申请该 chunk &#xff08;5&#xff09;释放第三块 chunk&#x…

vcs/verdi常用命令(持续更新)

1. 操作rtl 1.1 加载rtl命令 verdi -dbdir simv.daidir的目录 1.2 显示某时刻rtl的值 首先鼠标左键在波形上选中某个特定时刻&#xff0c;然后鼠标选中rtl代码文件&#xff0c;按x就会显示&#xff0c;再按x就会退出显示。 1.3 查找字符串 按/ 1.4 vcs将rtl的信号加载到…