我想要一些保留自然排序顺序1的字符串比较函数.Java中是否有这样的内容?我在String类中找不到任何内容,而Comparator类只知道两个实现.
我可以自己动手(这不是一个非常难的问题),但如果我不需要,我宁愿不重新发明轮子.
在我的具体情况下,我有我想要排序的软件版本字符串.所以我希望"1.2.10.5"被认为大于"1.2.9.1".
1通过"自然"排序顺序,我的意思是它将字符串与人类比较它们的方式进行比较,而不是"ascii-betical"排序顺序只对程序员有意义.换句话说,"image9.jpg"小于"image10.jpg","album1set2page9photo1.jpg"小于"album1set2page10photo5.jpg","1.2.9.1"小于"1.2.10.5"
我们有一些代码,它们根据坐标之间的距离对地址列表进行排序.这是通过collections.sort与自定义比较器完成的.
但是,有时会在列表中出现没有坐标的地址,从而导致出现NullPointerException.我最初的想法是让比较器返回0作为地址的距离,其中至少有一个坐标为空.我担心这可能会导致列表中"有效"元素的订单损坏.
所以在比较器ok中返回空数据的'0'值,或者有更清晰的方法来解决这个问题.
我对字符串的默认比较器(在SortedSet中)有问题.问题是默认比较器没有排序包含数字的良好字符串,即:在集合中我有:
room1, room2, room100
Run Code Online (Sandbox Code Playgroud)
自然排序应该如上所述,但在集合中我有:
room1, room100, room2
Run Code Online (Sandbox Code Playgroud)
我知道它为什么但我不知道如何改变它.
我正在排序由文本和数字组成的字符串.我希望排序将数字部分排序为数字,而不是字母数字.
例如,我想要:abc1def,...,abc9def,abc10def
而不是:abc10def,abc1def,...,abc9def
有谁知道这个算法(特别是在c ++中)
谢谢
我使用以下代码按字母顺序对文件进行排序,并对文件进行排序,如图所示:
for(int i = 0;i < maxcnt;i++)
{
for(int j = i+1;j < maxcnt;j++)
{
if(strcmp(Array[i],Array[j]) > 0)
{
strcpy(temp,Array[i]);
strcpy(Array[i],Array[j]);
strcpy(Array[j],temp);
}
}
}
Run Code Online (Sandbox Code Playgroud)

但我需要按照Windows资源管理器中的顺序对其进行排序

怎么这样排序?请帮忙
如何按长度排序数组,然后按字母顺序排序?
我有一个带有数字的东西列表,我现在得到:
Something1 Something10 Something2 Something3
虽然我想得到:
Something1 Something2 Something3 Something10
我有一个字符串列表,这很可能,但不保证包含数字列表,即,
{"1", "6", "2", "21", "89"}
Run Code Online (Sandbox Code Playgroud)
排序字符串列表的方式是什么,以便始终按升序显示?
在进行排序之前,我无法先将字符串解析为数字,因为字符串可以包含非数字字符.而且我不想查看列表并将每个组件检查到数字并进行排序.为此目的,是否已经存在一个库?
在我们有混合数字和非数字字符串项的情况下,数字字符串总是优先于非数字字符串.
Comparator在Guava中是否有一个实现以"自然"方式对字符串进行排序,可能包含数字?
例如:
"a 8"
"a 9"
"a 10"
我找到了一些有趣的链接,但看起来guava中没有任何东西可以完成这项工作......
StackOverflow:"对可能包含数字的字符串进行排序"对Alphanum算法的
一个很好的解释
我有以下字符串:
“字符串 1”
“字符串2”
“字符串 3”
“字符串 15”
“字符串 17”
我希望字符串按上述方式排序。但是,当我使用 SortDescription 对我的列表进行排序时,我得到以下输出:
“字符串 1”
“字符串 15”
“字符串 17”
“字符串2”
“字符串 3”
我知道有一些算法可以实现这一点,但是有没有办法使用 SortDescription 的内置功能来做到这一点?
private void SortCol(string sortBy, ListSortDirection direction)
{
ICollectionView dataView =
CollectionViewSource.GetDefaultView(ListView.ItemsSource);
dataView.SortDescriptions.Clear();
SortDescription sd = new SortDescription(sortBy, direction);
dataView.SortDescriptions.Add(sd);
dataView.Refresh();
}
Run Code Online (Sandbox Code Playgroud)
sortby 是我的视图模型中属性的属性名称,它表示我想要排序的列。
似乎我只有两个排序选项是升序和降序。但是它对 CollectionView 进行排序的方式并不是我希望对字符串进行排序的方式。有没有简单的方法来解决这个问题?
问题:
假设我们有以下字符串列表{"Test1.txt", "Test2.txt", "Test11.txt", "Test22.txt"},使用String::compareToor对它们Collator::compare进行排序将产生以下顺序:
Test1.txt
Test2.txt
Test22.txt
Test3.txt
Run Code Online (Sandbox Code Playgroud)
这很不方便(可以说),而更人性化的结果是:
Test1.txt
Test2.txt
Test3.txt
Test22.txt
Run Code Online (Sandbox Code Playgroud)
为了解决这个问题,我们可以编写自己的数字敏感的比较方法。但是,如果我们想要数字敏感排序以及使用现有实现Collator(或避免实现)进行国际化的好处,该怎么办?
有没有正确的方法来处理这个问题?或者也许有一个可靠的库可以解决这个问题?
其他语言:
在 Javascript 世界中,Intl.Collator的构造函数接受 a CollatorOption,它允许您设置配置来实现此类功能及更多功能:
const usCollator = Intl.Collator("us", { numeric: true });
const list = ["Test1.txt", "Test2.txt", "Test3.txt", "Test22.txt"];
list.sort(usCollator.compare);
console.log(list);
Run Code Online (Sandbox Code Playgroud)