EBCDIC编码中字符串的Java比较器

EBCDIC编码中字符串的Java比较器,java,comparator,ebcdic,Java,Comparator,Ebcdic,我遇到一个需求,需要将字符串转换为EBCDIC编码,然后对其进行排序。我们需要使用EBCDIC对其进行排序,因为字符串必须放入大型机中。我将要排序的字符串只有大写字母和整数 我在谷歌上搜索了一下,然后发现了 它按顺序列出了字符 我意识到EBCDIC排序与普通的java字典排序完全相反(至少对于我要处理的数据类型而言) 我的问题是我的实现权?如果不是我错过了什么?或者是否有任何java比较器可用于EBCDIC编码。您不应该花太多时间来了解EBCDIC的许多特性。鉴于您的问题范围有限,实现您的需求的

我遇到一个需求,需要将字符串转换为EBCDIC编码,然后对其进行排序。我们需要使用EBCDIC对其进行排序,因为字符串必须放入大型机中。我将要排序的字符串只有大写字母和整数

我在谷歌上搜索了一下,然后发现了 它按顺序列出了字符

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


我的问题是我的实现权?如果不是我错过了什么?或者是否有任何java比较器可用于EBCDIC编码。

您不应该花太多时间来了解EBCDIC的许多特性。鉴于您的问题范围有限,实现您的需求的简单方法如下:

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

这种方法的一个优点是,只有两段代码需要理解EBCDIC—一段转换为in,另一段转换为out。所有其他代码都可以使用Java系统库和您拥有的任何库进行排序、筛选、搜索和所有其他处理,而根本不考虑EBCDIC编码。

因为Java EBCDIC字符串中的字符类型隐式为UTF-16,所以需要将其作为Java字节数组进行比较

例如:

    Charset encoding = Charset.forName("IBM1047");
    Comparator<String> encComparator = (s1, s2) ->
            encoding.encode(s1)
                    .compareTo(encoding.encode(s2));
Charset encoding=Charset.forName(“IBM1047”);
比较器encComparator=(s1,s2)->
编码。编码(s1)
.compareTo(encoding.encode(s2));

是的,EBCDIC编码有一个比较器。下面是它的代码

`Comparator<Entity Class name> EBCDIC = new Comparator<Entity Class name>() 

     {  
        Charset encoding = Charset.forName("cp500");

   @Override         
  public int compare(Entity Class name jc1, 
       Entity Class name jc2) {             
          return (int) (encoding.encode(jc1.toString()).compareTo(encoding.encode(jc2.toString())));         
        }     
      };   
比较器EBCDIC=新比较器() { Charset encoding=Charset.forName(“cp500”); @凌驾 公共int比较(实体类名jc1, 实体类名jc2{ return(int)(encoding.encode(jc1.toString()).compareTo(encoding.encode(jc2.toString())); } };
谢谢你的回答。你能帮我回答你写的第一点吗。例如:我从用户界面收到的字符串是“11AA”。现在你能告诉我怎么做吗proceed@Akshay创建并填充EBSDIC字节。使用
Charset.forName(“IBM1047”)
制作EBSDIC。在
Charset
对象上使用
encode
decode
进行EBSDIC的转换。根据,标点符号应小于字母。但上述方法的结果正好相反。我注意到,在按照您推荐的方式实现它时,EBCDIC中的前128个字符被赋予更高的值,而接下来的128个字符则被赋予更低的值。这可能是因为编码字节在Java中被签名吗?如果是,我如何解决这个问题?如果没有,我还缺少什么?是的,这是因为Java中的字节被签名。字节128->255被视为<0,因此