例如,在Windows文件夹中,如果我们创建一些文件并将其命名为1.html,2.txt,3.txt,photo.jpg,zen.png,则顺序将保持不变.但是如果我们创建另一个名为_file.doc的文件,它将被放在顶部.(考虑到我们按名称降序排序)
同样,将被视为第一个的角色是什么,这样如果我使用该角色,它会将文件放在层次结构的顶部?
windows algorithm programming-languages char special-characters
我正在寻找一种算法来排序字符串,类似于在Windows资源管理器中排序文件(和文件夹)的方式.似乎在排序时会考虑字符串中的数值,这会产生类似的结果
name 1, name 2, name 10
Run Code Online (Sandbox Code Playgroud)
代替
name 1, name 10, name 2
Run Code Online (Sandbox Code Playgroud)
通过常规字符串比较得到的.
我本人即将开始写这篇文章,但是想要检查一下是否有人这样做过,并愿意分享一些代码或见解.我接近这个的方法是在比较之前将前导零添加到名称中的数值.这会产生类似的结果
name 00001, name 00010, name 00002
Run Code Online (Sandbox Code Playgroud)
当使用常规字符串排序进行排序时,会给出正确的结果.
有任何想法吗?
我有一个简单的Java程序,它读取文件目录并输出文件列表.我按名称对文件进行排序:
String [] files = dirlist.list();
files = sort(files);
Run Code Online (Sandbox Code Playgroud)
我的问题是它以不同于Windows资源管理器的方式按名称排序.
例如,如果我有这些文件:abc1.doc,abc12.doc,abc2.doc.
Java会像这样排序:
abc1.doc
abc12.doc
abc2.doc
Run Code Online (Sandbox Code Playgroud)
当我在Windows资源管理器中打开文件夹时,我的文件排序如下:
abc1.doc
abc2.doc
abc12.doc
Run Code Online (Sandbox Code Playgroud)
如何让Java在Windows资源管理器中对文件进行排序?这是Windows的伎俩吗?
我需要按如下方式对文件名进行排序:1.log,2.log,10.log
但是当我使用OrderBy(fn => fn)时,它会将它们排序为:1.log,10.log,2.log
我显然知道这可以通过编写另一个比较器来完成,但有没有更简单的方法从词典顺序转换为自然排序顺序?
编辑:目标是获得与在Windows资源管理器中选择"按名称排序"时相同的顺序.
经过大量阅读和实验后,似乎我想要主要的搜索强度,但第三或相同的排序强度。主要问题:用 H2(或任何其他数据库)可以实现吗?
\n\n第二个问题:我是这里唯一的人吗?或者你们中有人也喜欢上述组合吗?一些确认会对我的理智有所帮助。
\n\n背景:\n似乎只能在创建数据库的一开始就设置排序规则。所以我想确保选择正确的一个。我主要考虑这些用例(目前):
\n\n用户可以开始输入内容来过滤表格的搜索字段:这里 PRIMARY 似乎是最合适的,以避免丢失任何结果(用户习惯于 Google...)。尽管如此,如果能够为用户提供启用二级或三级排序规则以进行更精确搜索的选项,那就太好了。
排序:当用户单击表列来对内容进行排序时,TERTIARY/IDENTICAL 排序似乎比较合适。这就是我从日常经验中习惯的。
我在这里阅读了官方 H2 文档: http: //www.h2database.com/html/commands.html#set_collat ion 。 \n在这里:http://www.h2database.com/html/datatypes.html#varchar_ignorecase_type \n更多相关信息:\n排序规则强度和本地语言关系
\n\n测试sql(来自https://groups.google.com/forum/?fromgroups=#!topic/h2-database/lBksrrcuGdY):
\n\ndrop all objects;\nset collation english STRENGTH PRIMARY;\ncreate table test(name varchar);\ninsert into test values (\'\xc3\x80\'), (\'\xc3\x84\'), (\'\xc3\x82\'), (\'A\'), (\'\xc3\xa0\'), (\'\xc3\xa4\'), (\'\xc3\xa2\'), (\'a\'), (\'\xc3\xa0a\'), (\'\xc3\xa4a\'), (\'\xc3\xa2a\'), (\'aa\'), (\'B\'), (\'b\');\nselect * from test where name like \'a\' order by name;\nselect * from test order by name;\nRun Code Online (Sandbox Code Playgroud)\n\n
我正在使用下面的代码来获取文件列表排序:(如窗口资源管理器)
package com.codnix.quickpdfgenerator.testing;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class FileListOrder {
public static void main(String args[]) {
//huge test data set ;)
File folder = new File("C:\\Users\\Codnix\\Desktop\\Test Sequence");
File[] listOfFiles = folder.listFiles();
List<File> filenames = Arrays.asList(listOfFiles);
//adaptor for comparing files
Collections.sort(filenames, new Comparator<File>() {
private final Comparator<String> NATURAL_SORT = new WindowsExplorerComparator();
@Override
public int compare(File o1, File o2) {;
return NATURAL_SORT.compare(o1.getName(), o2.getName());
}
});
for (File …Run Code Online (Sandbox Code Playgroud) 如何获得java.io.File.list()与Windows资源管理器中相同的顺序?
在程序中,我正在创建Temp文件夹,例如Temp1,Temp2依此类推.但是当我使用java.io.File.list()检索文件夹列表,它给人的Temp1,Temp10等等.
请告诉我们如何获得与Windows资源管理器中显示的相同的订单列表?
谢谢