目前我有一些代码获取文件名并以不同的方式对它们进行排序(区域敏感的自然排序、不区分大小写的 ASCIIbetical 排序、修改日期等),例如,它使用的区域敏感的自然排序这个:
Collections.sort(files, new Comparator<File>() {
@Override
public int compare(File f1, File f2) {
return NaturalComparator.compareNatural(collator, f1.getName(), f2.getName());
}
});
我想知道如何让它忽略文件名开头的单词“the”,而不是像这样排序文件:
苹果
胡萝卜
香蕉
它这样命令它们:
苹果
香蕉
胡萝卜
最佳答案
在将 The
传递给比较器之前,您可以使用 String#replaceFirst(regex, replacement)
替换第一次出现的 The
或 String.replaceAll(regex, replacement)
方法,它们都以 regex
作为参数来替换,并且都可以在这里使用:-
@Override
public int compare(File f1, File f2) {
return NaturalComparator.compareNatural(collator,
f1.getName().replaceAll("^(?i)The ", ""),
f2.getName().replaceAll("^(?i)The ", ""));
}
在 regex pattern
之前添加了一个 (?i)
标志来进行不区分大小写替换(感谢@Chris 指出这一点) .
Caret (^)
添加在模式之前,因此它仅替换字符串开头的 The
。因此,The banana
将替换为 banana
,但 Banana, The
不会替换为 Banana,
。它将保持不变。
关于java - 对 Java 集合进行排序时忽略单词 "the",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14745583/