如何解码格式化的字符串?

问题描述 投票:-2回答:2

我正在格式化我的字符串:

final String identity = String.format("%04X-%04X", random.nextInt(), random.nextInt(), "CORP");

现在,如果我知道identity变量的值,有什么办法可以通过某种方式解释它来获得CORP值吗?

final String identity = "7C8804DE-5B4CC287";
// print out CORP here? but how?

如何从身份字符串中提取CORP值?

java string formatting string-formatting
2个回答
1
投票

这个问题的答案是,你所要求的是不可能的。

字符串"CORP"不包含在格式化结果中。你似乎相信输出中有一些“残留物”可以重新组合成输入,但事实并非如此。没有%s格式说明符导致字符串包含在结果中,所以它消失了。

此外,格式说明符%04X可能应该是%08X,以避免在int值最终具有十六进制的前导零时不一致的结果字符串长度。


1
投票

除了Jim的答案之外,格式字符串通常是不可逆的。要了解原因,请考虑以下事项:

final String s = String.format("%d%d", random.nextInt(), random.nextInt());

这可能会产生一个字符串“12345678”。但你无法确定原始数字是{1, 2345678}还是{12, 345678}或......

如果格式字符串中有足够明确的标点符号,则可以“反转”格式化文本。但是,我不知道Java的任何通用“格式反转器”库。


使用更正的格式字符串,有足够的标点符号允许“CORP”字符串由假设的提取器库提取。但正如我所说,我不知道任何这样的图书馆。处理这种任务的常用方法是实现一个简单的解析器;例如使用String::splitPattern / Matcher。但是在格式产生模糊或有损字符串的情况下,无法恢复原始信息。

© www.soinside.com 2019 - 2024. All rights reserved.