Java 如何解码反向格式化字符串?

Java 如何解码反向格式化字符串?,java,string,formatting,string-formatting,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? 如何从标识字符串中提取C

我正在格式化字符串,如下所示:

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”。您似乎认为输出中有一些“残留物”,可以重新组合回输入中,但事实并非如此。没有导致字符串包含在结果中的
%s
格式说明符,因此它消失了


此外,格式说明符
%04X
可能应该是
%08X
,以避免在
int
值以十六进制结尾时出现不一致的结果字符串长度。

加上Jim的答案,格式字符串通常是不可逆的。要理解为什么,考虑一下:

final String s = String.format("%d%d", random.nextInt(), random.nextInt());
这可能会产生一个字符串“12345678”。但您无法确定原始数字是
{12345678}
还是
{12345678}
还是

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



对于已更正的格式字符串,有足够的标点符号允许假设的提取器库提取“CORP”字符串。但正如我所说,我不知道有这样的图书馆。处理此类任务的常规方法是实现一个简单的解析器;e、 g.使用
String::split
模式
/
匹配器
。但在格式产生不明确或有损字符串的情况下,无法恢复原始信息。

问题不清楚。如果只有结果,
CORP
被丢弃,因为没有
%s
格式将其包含在结果中。它不见了。为什么你会认为结果中有任何“残留”?另外,
%04X
可能应该是
%08X
,或者如果值中有前导零,您将得到不一致的结果。如果我也通过了
%s
,那么是否可能?像这样,我的意思是
%04X-%04X-%s”
如果您这样做,那么输出将是(例如)
“7C8804DE-5B4CC287-CORP”
——如果该输出是可接受的,那么您将能够使用
字符串分割(“-”
)来恢复各个字段。是的,这就是我的意思。很抱歉,说得不清楚。所以我可以在
-
上拆分并提取最后一部分。明白了。使用
拆分(“-”,3)
,这样它就不会在第三部分的任何
-
字符上拆分。我的第三个单词将不会有任何
-
,它将始终是一个字符串。