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

How to decode back formatted string?

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

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

问题的答案是你问的是不可能的。

字符串 "CORP" 未包含在格式化结果中。您似乎认为输出中有一些 "residue" 可以重新构造回输入,但事实并非如此。没有 %s 格式说明符导致字符串包含在结果中,所以它消失了。

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

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

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

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

如果格式字符串中有足够明确的标点符号,则可以 "reverse" 格式化文本。但是,我不知道 Java.

有任何通用的 "format reverser" 库

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