我遇到了一个要求,我需要将字符串转换为 EBCDIC 编码,然后对其进行排序。我们需要使用 EBCDIC 对其进行排序,因为字符串必须进入大型机。我要排序的字符串只有大写字母和整数。
我用谷歌搜索了一些,然后我发现了 IBM 的链接,该链接按顺序列出了字符
我意识到 EBCDIC 排序与普通的 java 字典排序完全相反(至少对于我要处理的数据类型)。
我的问题是我的认识对吗?如果不是我错过了什么?或者是否有任何可用于 EBCDIC 编码的 java 比较器。
我遇到了一个要求,我需要将字符串转换为 EBCDIC 编码,然后对其进行排序。我们需要使用 EBCDIC 对其进行排序,因为字符串必须进入大型机。我要排序的字符串只有大写字母和整数。
我用谷歌搜索了一些,然后我发现了 IBM 的链接,该链接按顺序列出了字符
我意识到 EBCDIC 排序与普通的 java 字典排序完全相反(至少对于我要处理的数据类型)。
我的问题是我的认识对吗?如果不是我错过了什么?或者是否有任何可用于 EBCDIC 编码的 java 比较器。
您不应该花太多时间弄清楚 EBCDIC 的许多特性。鉴于您的问题范围有限,实现您的要求的简单方法如下:
java.lang.String
以 Java 的本机编码 (UTF-16)生成的辅助方法java.lang.String
Java 的本机编码 (UTF-16) 并生成 EBCDIC 编码的字符串这种方法有一个优点,即您的两段代码需要理解 EBCDIC - 一个转换为输入,一个转换为输出。所有其他代码都可以使用 Java 系统库以及您拥有的任何库来进行排序、过滤、搜索和所有其他处理,而根本无需考虑 EBCDIC 编码。
由于 char 类型在 Java EBCDIC 中隐式为 UTF-16,因此需要将其作为 Java 字节数组进行比较。
例子:
Charset encoding = Charset.forName("IBM1047");
Comparator<String> encComparator = (s1, s2) ->
encoding.encode(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())));
}
};