我正在格式化我的字符串:
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
值?
答案 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::split
或Pattern
/ Matcher
。但是在格式产生模糊或有损字符串的情况下,无法恢复原始信息。