ASCII値が@より小さいのに、#が最後に表示されるのはなぜですか?
私のクリーンルームの実装:
final List<String> list = Arrays.asList("@a", "#a");
Collections.sort(list);
System.out.println(list);
出力:
[#a、@ a]
このコードは問題を再現しません。
参考:
'#'は0x23
'@'は0x40
すべてが正常に見えます。
編集:あなたのコメントに続く新しいコード「コードはCollatorを使用してCollator collator = Collator.getInstance();
いますが、どのロケールにも固有ではないために使用されています。」:
final List<String> list = Arrays.asList("@a", "#a");
final Collator c = Collator.getInstance();
Collections.sort(list, c);
System.out.println(list);
出力:
[@ a、#a]
これはあなたの問題を再現します。
Collator.getInstance()
ASCIIテーブルの並べ替えに使用すると、次のようになります。
-、_ 、、、;、:、!、?、/、。、 `、^、'、"、(、)、[、]、{、}、@、$、*、\、&、#、 %、+、<、=、>、|、0、1、2、3、4、5、6、7、8、9、a、A、b、B、c、C、d、D、e、 E、f、F、g、G、h、H、i、I、j、J、k、K、l、L、m、M、n、N、o、O、p、P、q、Q、 r、R、s、S、t、T、u、U、v、V、w、W、x、X、y、Y、z、Z
これはASCII照合順序とはかなり異なることがわかります。
"、#、$、%、&、'、(、)、*、+ 、、、-、。、/、0、1、2、3、4、5、6、7、8、9、:、 ;、<、=、>、?、@、A、B、C、D、E、F、G、H、I、J、K、L、M、N、O、P、Q、R、S、 T、U、V、W、X、Y、Z、[、\、]、^、_、 `、a、b、c、d、e、f、g、h、i、j、k、l、 m、n、o、p、q、r、s、t、u、v、w、x、y、z、{、|、}
OPの利益のために、これはこの出力を作成するために使用されるコードです。
final List<String> list = new ArrayList<String>();
final Collator col = Collator.getInstance();
for (char c = '!'; c < '~'; c++)
{
list.add(c+"");
}
Collections.sort(list, col);
System.out.println(list);