我最近意识到,Java Collation似乎忽略了空间.
我有以下术语列表:
Amman Jost
Ammann Heinrich
Ammanner Josef
Bär Walter
Bare Werner
Barr Burt
Barraud Maurice
Run Code Online (Sandbox Code Playgroud)
上面的订单反映了德国的所需订单,即占用空间.但是,Java Collation使用
Collator collator = Collator.getInstance(Locale.GERMANY);
Collections.sort(values, collator);
Run Code Online (Sandbox Code Playgroud)
给我以下顺序:
Amman Jost
Ammanner Josef
Ammann Heinrich
Bare Werner
Barraud Maurice
Barr Burt
Bär Walter
Run Code Online (Sandbox Code Playgroud)
上面的结果实际上并不是我所期望的,因为空间没有被考虑(看起来像这里描述的情况:维基百科字母顺序).
这是否意味着,Java Collation不适用于此类用例,或者我在这里做错了什么?有没有办法让Java Collation空间有意识?
我很乐意提出任何意见或建议.
我从Collator的Javadoc中读到了以下内容.
"语言特征的优势的确切分配取决于语言环境.例如,在捷克语中,"e"和"f"被认为是主要差异,而"e"和"ê"是次要差异,"e"和"E"是三级差异,"e"和"e"是相同的."
这是否意味着我应该根据我使用的语言设置STRENGTH?如果是这样,有人可以建议语言环境的默认值:us_en,us_es,ca_fr,spain_spanish,chile_spanish,portuguese
我想在另一个问题上使用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)