Замена ConstantUtf8 из ConstantPool класса с использованием 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!");
    }

Приведенный выше код заменяет "SampleString" на "OtherString" с индексом 95, но я хочу заменить все вхождения, поэтому я добавил цикл, подобный этому,

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 ответов

Другие вопросы по тегам