Угадай что? Если вы работаете с Java 1.5+, конкатенация работает так же с строковыми литералами
String h = "hello" + "world";
и
String i = new StringBuilder().append("hello").append("world").toString();
То же самое.
Итак, компилятор уже сделал всю работу за вас.
Конечно, лучше было бы:
String j = "hellworld"; // ;)
Что касается второго, да, это предпочтительнее, но не должно быть таким сложным, с силой «поиска и замены» и небольшим количеством регулярных выражений foo
Например, вы можете определить метод, подобный приведенному в этом примере:
public static void replace( String target, String replacement,
StringBuilder builder ) {
int indexOfTarget = -1;
while( ( indexOfTarget = builder.indexOf( target ) ) >= 0 ) {
builder.replace( indexOfTarget, indexOfTarget + target.length() , replacement );
}
}
И ваш код в настоящее время выглядит так:
someString = someString.replace("VARIABLE1", "abc");
someString = someString.replace("VARIABLE2", "xyz");
Все, что вам нужно сделать, это взять в текстовом редакторе триггер что-то вроде этого поиска vi и заменить:
%s/^.*("\(.*\)".\s"\(.*\)");/replace("\1","\2",builder);
Это гласит: "возьмите что-нибудь в круглых скобках, и это похоже на строковый литерал, и поместите это в эту другую строку" .
И ваш код будет выглядеть так:
someString = someString.replace("VARIABLE1", "abc");
someString = someString.replace("VARIABLE2", "xyz");
на это:
replace( "VARIABLE1", "abc", builder );
replace( "VARIABLE2", "xyz", builder );
В кратчайшие сроки.
Вот рабочая демонстрация:
class DoReplace {
public static void main( String ... args ) {
StringBuilder builder = new StringBuilder(
"LONG CONSTANT WITH VARIABLE1 and VARIABLE2 and VARIABLE1 and VARIABLE2");
replace( "VARIABLE1", "abc", builder );
replace( "VARIABLE2", "xyz", builder );
System.out.println( builder.toString() );
}
public static void replace( String target, String replacement,
StringBuilder builder ) {
int indexOfTarget = -1;
while( ( indexOfTarget = builder.indexOf( target ) ) > 0 ) {
builder.replace( indexOfTarget, indexOfTarget + target.length() ,
replacement );
}
}
}