使用BCEL替换类的ConstantPool中的ConstantUtf8

时间:2013-12-19 13:19:45

标签: java bytecode bcel

我有一个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处将“SampleString”替换为“OtherString”,但是我想替换所有出现,所以我添加了一个这样的循环,

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.可以做什么来替换所有?

0 个答案:

没有答案