2

私は配列を持っています。配列内の各スペースには 2 つの文字列が含まれます (1 つの文字列には文字のみが含まれ、もう 1 つの文字列には数字が含まれます)。

私が今やろうとしているのは、配列をアルファベット順または数値順にソートすることです (配列内のどのスペースが選択されているかによって異なります)。そのために、compareTo() メソッドを使用しています。しかし、数字に従って配列をソートしようとすると、実際にはうまくいかないことがわかりました。

私の推測では、Java は文字列を ascii コードで処理するため、数値は番号順に表示されません。

質問: どうすれば修正できますか?

4

5 に答える 5

2

数字を比較するために、これは役に立つかもしれません。

英数字アルゴリズム

ウェブサイトから:http ://www.davekoelle.com/alphanum.html

人々は、ソフトウェアとは異なる方法で文字列を数字でソートします。ほとんどの並べ替えアルゴリズムはASCII値を比較するため、人間の論理と矛盾する順序が生成されます。修正方法は次のとおりです。

そのサイトからのJavaコンパレータ実装へのリンクは次のとおりです。 http://www.davekoelle.com/files/AlphanumComparator.java

于 2013-01-11T11:19:20.627 に答える
2

あなたのcompareTo()方法では、整数を表す2つの文字列を見ていることを検出したら、それらを比較する前に、それらが同じ長さであることを確認してください。1つの文字列が短い場合は、文字列の長さが等しくなるまで、先行ゼロを先頭に追加します。

たとえば、デフォルトのアルゴリズムと正しく比較しないために使用されます:32より大きいので、の後にあるものとして比較します。ただし、ゼロを付加すると、比較は再び機能します。は。未満です。123332132032123

于 2013-01-11T11:20:40.133 に答える
1

はい、その通りです。文字列は Unicode コードポイント値に従ってソートされます。これは、「2」が「a」より小さく、「11」より大きいことを意味します。

Natural Sort Orderを探しているのではないかと思います。それについて詳しく説明している優れた SO 投稿はJava String Number Comparatorであり、実際の実装は SO 投稿Java での Natural sort order string comparison - is one built in? で見つけることができます。

于 2013-01-11T11:23:26.280 に答える
0

数値でソートする場合は、文字列を比較する前に数値に変換してください。

于 2013-01-11T11:26:41.890 に答える
0

Long(or)Folat.isNaN() メソッドを使用してその番号または文字列を確認し、それを使用して並べ替えを行うことができます。

于 2013-01-11T11:21:05.413 に答える