2015-01-15 6 views
0

У меня есть String Массив из хорошей пары сотен строк кода. У меня есть два других массива String: один со значениями, которые я хочу заменить, а другой - значением, которое я хочу заменить. Мне нужно пройти через каждую строку исходного кода и проверить каждую строку, если она содержит все, что мне нужно заменить, и если это так, замените ее. Я хочу заменить его на совершенно другой String Array, так что оригинал остается неизменным. Это то, что у меня есть, но это не совсем работает.Сравнение массивов

for(int i=0; i<originalCode.length; i++) { 

    if(originalCode[i].contains("| "+listOfThingsToReplace[i])) { 

     newCode[i]=originalCode[i].replaceAll(("| "+listOfThingsToReplace[i]), ("| "+listOfReplacingThings[i])); 

    } 

} 

Очевидно мне нужно больше счетных переменных где-то (особенно потому, что originalCode.length !=listOfThingsToReplace.length), но я не могу понять, где. Нужно ли мне больше для циклов? Я устал от этого ... но «Exception in thread "main" java.lang.OutOfMemoryError: Java heap space» ... Любая помощь, пожалуйста?

+0

Используйте 'заменить()', который заменяет все вхождения простого текста, а не 'replaceAll () ', который заменяет все вхождения регулярного выражения. – Bohemian

ответ

1

Я думаю, что это следует сделать трюк, если я правильно понять проблему

// New Code Array 
 
String[] newCode = new String[originalCode.length]; 
 

 
for (int i=0; i<originalCode.length; i++) { 
 
\t // New Code Line 
 
\t String newCodeLine = originalCode[i]; 
 

 
\t // Iterate through all words that need to be replaced 
 
\t for (int j=0; j<listOfThingsToReplace.length; j++) { 
 
\t \t 
 
\t \t // String to replace 
 
\t \t String strToReplace = listOfThingsToReplace[j]; 
 
\t \t 
 
\t \t // String to replace with 
 
\t \t String strToReplaceWith = (j >= listOfReplacingThings.length) ? "" : listOfReplacingStrings[j]; 
 
\t \t 
 
\t \t // If there is a string to replace with 
 
\t \t if (strToReplaceWith != "") { 
 
\t \t \t 
 
\t \t \t // then replace all instances of that string 
 
\t \t \t newCodeLine = newCodeLine.replaceAll(strToReplace, strToReplaceWith); 
 
\t \t } \t \t 
 
\t } 
 
\t 
 
\t // Assign the new code line to our new code array 
 
\t newCode[i] = newCodeLine; 
 
}

+0

Используйте '! StrToReplaceWith.equals (" ")' вместо '! ='. Плюс эта часть даже не имеет смысла; как j может быть больше длины, когда вы проверите свой цикл for. –

+0

Вы правы в .equals, я всегда забываю об этом. Я поставил чек с помощью j для обработки ситуации, когда listofReplacingThings.length меньше, чем listOfThingsToReplace.length, но может быть или не быть необходимым –

Смежные вопросы