将字母数字字符串压缩并编码为 Java 中的字母数字字符串

问题描述

实际上我需要将一个字符串发送到服务器,它只需要大小为 15 或更小的字符串。我有一个长度为 32 或 36 的字符串,但该字符串仅包含字母数字字符。现在我想将字符串压缩为 15 个字符长,仅包含字母数字字符。

我还看到一个选项,它转换为 BigInteger,但也没有像预期的那样缩小 15

这在 Java 中可行吗?有没有我可以使用的图书馆。我真的需要帮助来做到这一点

解决方法

如果您扩展目标字母表以包含某些 N>0 个其他字符,那么您可以使用比原始字符更少的字符对输入字符串进行编码。 然后,您可以对源字母表中的几个字符进行编码,并使用目标字母表中的单个字符进行编码。

您可以根据需要使用以下软件包

package com.binaryheart.common.comparator;
import java.text.Collator;
import java.util.Comparator;
import java.util.Locale;
import java.util.Objects;
,

您不能将以字节表示的字母数字(大写、小写和数字,总共 62 个)压缩为 2 倍。你能得到的最多是比减少 25% 更好的一点点。因此您可以将 32 个字节减少到 24 个字节,或将 36 个字节减少到 27 个字节。结果是二进制数据。

最快的方法是将每个字符编码为六位。这也为您提供了两个额外的字符,您可以将其添加到允许的集合中,使其达到 64。然后将四个这样的字符(每个 6 位)打包成三个字节(24 位)就很简单了。