Так как вы не заполняете все ценности сразу, я предложил бы, чтобы вы использовали строителя:
public class MessageBuilder
{
private final String fmt;
private final Object[] args;
public MessageBuilder(final String fmt, final int nrArgs)
{
this.fmt = fmt;
args = new Object[nrArgs];
}
public MessageBuilder addArgument(final Object arg, final int index)
{
if (index < 0 || index >= args.length)
throw new IllegalArgumentException("illegal index " + index);
args[index] = arg;
return this;
}
public String build()
{
return MessageFormat.format(fmt, args);
}
}
Таким образом, можно сделать:
final MessageBuilder msgBuilder = new MessageBuilder("{0}/suhdp run -command \"suhilb\" -input /sufiles/{1} -output /seismicdata/mr_files/{2}/ -cwproot {3}", 4)
.addArgument(arg0, 0).addArgument(arg3, 3);
// later on:
msgBuilder.addArgument(arg1, 1).addArgument(arg2, 2);
// print result
System.out.println(msgBuilder.build());
Этот код, вероятно, испытывает недостаток в некоторой проверке на ошибки и т.д., и это далеко от того, чтобы быть оптимальным, но вы получаете идею.