4

文字列を EBCDIC エンコーディングに変換してから並べ替える必要があるという要件に遭遇しました。文字列はメインフレームに移動する必要があるため、EBCDIC で並べ替える必要があります。ソートする文字列には、大文字のアルファベットと整数のみが含まれます。

私はそれをいくつかグーグルで調べた後、文字を順番にリストしたIBMからのリンクに出くわしました

私が気付いたのは、EBCDIC ソートは通常の Java 辞書式ソートとは正反対であるということです (少なくとも、処理しようとしているデータの種類については)。

私の質問は私の実現ですよね?私が見逃しているものではない場合は?または、EBCDIC エンコーディングに使用できる Java コンパレータはありますか。

4

3 に答える 3

5

EBCDIC の多くの特徴を理解するのに多くの時間を費やすべきではありません。問題の範囲が限られている場合、要件を実装するための簡単なアプローチは次のとおりです。

  • EBCDIC を読み取りjava.lang.String、Java のネイティブ エンコーディング (UTF-16)で生成するヘルパー メソッドを実装します。
  • java.lang.StringJava のネイティブ エンコーディング (UTF-16)を取り込み、EBCDIC でエンコードされた文字列を生成するヘルパー メソッドを実装します。
  • 最初の方法を使用してデータを読み取ります。必要に応じて並べ替え、その他の処理を行います。2 番目の方法を使用して、データをメインフレームに書き込みます。

このアプローチには、EBCDIC を理解する必要があるのはコードの 2 つの部分 (変換する部分と変換する部分) のみであるという利点があります。他のすべてのコードは、EBCDIC エンコーディングをまったく考慮せずに、Java システム ライブラリと、並べ替え、フィルタリング、検索、およびその他すべての処理用の任意のライブラリを使用できます。

于 2014-07-02T07:26:27.163 に答える
5

Java では char 型が暗黙的に UTF-16 であるため、EBCDIC 文字列は Java バイト配列として比較する必要があります。

例:

    Charset encoding = Charset.forName("IBM1047");
    Comparator<String> encComparator = (s1, s2) ->
            encoding.encode(s1)
                    .compareTo(encoding.encode(s2));
于 2014-07-02T07:39:32.103 に答える