EBCDIC编码中String的Java比较器

Aks*_*hay 4 java ebcdic comparator

我遇到过一个要求,我需要将字符串转换为EBCDIC编码然后对其进行排序.我们需要用EBCDIC对它进行排序,因为字符串必须进入大型机.我将排序的字符串仅包含captial和integers中的字母.

我用Google搜索了一些然后我遇到了IBM的 链接,它已按顺序列出了字符

我意识到EBCDIC排序与普通的java词典排序完全相反(至少对于我要处理的数据类型).

我的问题是我的认识对吗?如果不是我错过了什么?或者是否有任何可用于EBCDIC编码的java比较器.

das*_*ght 5

你不应该花太多时间来弄清楚EBCDIC的许多特点.鉴于您的问题范围有限,实现您的要求的简单方法如下:

  • 实现一个读取EBCDIC并java.lang.String以Java的本机编码(UTF-16)生成的辅助方法
  • 实现一个辅助方法,该方法接受java.lang.StringJava的本机编码(UTF-16)并生成EBCDIC编码的字符串
  • 使用第一种方法读取数据.根据需要排序并进行其他处理.使用第二种方法将数据写入大型机.

这种方法的优势在于,只有两段代码需要理解EBCDIC - 转换后的那个,以及转换出来的那个.所有其他代码都可以使用Java系统库以及任何用于排序,过滤,搜索和所有其他处理的库,而无需考虑EBCDIC编码.


McD*_*ell 5

由于char类型在Java中隐式为UTF-16,因此需要将EBCDIC字符串作为Java字节数组进行比较.

例:

    Charset encoding = Charset.forName("IBM1047");
    Comparator<String> encComparator = (s1, s2) ->
            encoding.encode(s1)
                    .compareTo(encoding.encode(s2));
Run Code Online (Sandbox Code Playgroud)