我正在寻找一种算法来排序字符串,类似于在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)
当使用常规字符串排序进行排序时,会给出正确的结果.
有任何想法吗?
我想在另一个问题上使用Sander Pham建议的代码.我需要像Windows资源管理器那样对字符串名称的java ArrayList进行排序.他的代码适用于一切,但只针对一个问题.我本来希望对这个问题发表评论,但我需要更多的声誉点来评论.无论如何......他建议使用自定义比较器实现的类并使用它来比较字符串名称.这是该类的代码:
class IntuitiveStringComparator implements Comparator<String>
{
private String str1, str2;
private int pos1, pos2, len1, len2;
public int compare(String s1, String s2)
{
str1 = s1;
str2 = s2;
len1 = str1.length();
len2 = str2.length();
pos1 = pos2 = 0;
int result = 0;
while (result == 0 && pos1 < len1 && pos2 < len2)
{
char ch1 = str1.charAt(pos1);
char ch2 = str2.charAt(pos2);
if (Character.isDigit(ch1))
{
result = Character.isDigit(ch2) ? compareNumbers() : -1;
}
else if …Run Code Online (Sandbox Code Playgroud)