我有一个 java 类文件,其常量池包含一些 ConstantUtf8 数据,因为
75. CONSTANT_Utf8 : SampleString
95. CONSTANT_Utf8 : SampleString
不同索引上的数据相同,我编写了以下代码:
ConstantPoolGen cp = classGen.getConstantPool();
int a = cp.lookupUtf8("SampleString");
if(a != -1)
{
cp.setConstant(a, new ConstantUtf8("OtherString"));
System.out.println("Found and Replaced");
}
else
{
System.out.println("Not Found!");
}
上面的代码在索引 95 处用“OtherString”替换了“SampleString”,但我想替换所有出现的,所以我添加了一个这样的循环,
for(int i=0; i<2; i++){
int a = cp.lookupUtf8("SampleString");
if(a != -1)
{
cp.setConstant(a, new ConstantUtf8("OtherString"));
System.out.println("Found and Replaced");
}
else
{
System.out.println("Not Found!");
}
}
这样它将通过索引,即 75 和 95 并替换为新值,但不幸的是,它产生与上述相同的结果意味着只替换一个出现,即 75。可以做些什么来替换所有?