首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在不丢失数据的情况下减少字符串长度

在不丢失数据的情况下减少字符串长度
EN

Stack Overflow用户
提问于 2022-03-09 10:05:16
回答 1查看 746关注 0票数 0

我有一个长度为13的字符串,由字母组成(大写+小写都是可能的,但目前只使用UpperCase)和整数(0-9)(例如: BWOOL0JDXUNP1),我希望在不丢失任何数据的情况下将其长度减少到6-10个字符。我尝试使用StandardCharsets.UTF_8将其转换为字节,然后使用new BigInteger(1, bytes).toString(36)将其转换为字节,但它将长度增加到18个字符。我不知道这是否可能。如果有任何方法在Java中做到这一点,请帮助。

EN

回答 1

Stack Overflow用户

发布于 2022-03-09 12:28:03

假设字符串代表基数36 [0-9A-Z]中的一个数字,则可以通过将其转换为基62 [0-9A-Za-z]来“压缩”它,但是,这对缩小大小没有太大帮助,只有一个符号被“保存”:

代码语言:javascript
复制
String str = "BWOOL0JDXUNP1";
BigInteger bi = new BigInteger(str, 36);

String alpha = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
BigInteger size = BigInteger.valueOf(alpha.length());
System.out.println(str);

StringBuilder sb = new StringBuilder();
while (bi.compareTo(BigInteger.ZERO) > 0) {
    int cp = bi.mod(size).intValue();
    sb.append(alpha.charAt(cp));
    bi = bi.divide(size);
}
System.out.println(sb);
// -> BWOOL0JDXUNP1
// -> NXew7nv28E51

另外,二进制压缩可以使用一些自定义编码,例如,上述62个字符[0-9A-Za-z]仅适合6位,因此上述12个字符可以用12 * 0.75 =9字节表示。当然,在这种情况下,需要额外的“解包装”方法来正确地表示结果。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71407548

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档