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

时间:2017-12-23 23:22:19

标签: java string formatting string-formatting

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

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值?

2 个答案:

答案 0 :(得分:1)

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

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

此外,格式说明符%08X可能应为int,以避免在{{1}}值最终以十六进制显示前导零时不一致的结果字符串长度。

答案 1 :(得分:1)

添加到Jim的答案中,格式字符串通常不可逆 。要了解原因,请考虑以下事项:

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

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

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

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