Manipular arquivo .properties

e ai pessoal blz, estou com uma duvida aqui tenho um arquivo Messages.properties e quero passar um valor qualquer para ser colocado no lugar de {0}, {1}, {2}, etc

o arquivo Messages.properties é esse:

UNKNOWN_OPTION = Unkown %-option {0}
UNEXPECTED_CHAR = Unexpected character {0} 
UNEXPECTED_NL = Unexpected character <newline> {0}

para pegar uma mensagem qualquer tentei usar as duas opcoes a seguir, elas pegam corretamente a mensagem que eu quero, porem nao consigo setar os campos jah mencionados acima,

ResourceBundle rb = ResourceBundle.getBundle("Messages");
System.out.println(rb.getString("UNKNOWN_OPTION"));

ou

try {  
      Properties p = new Properties();
      p.load( new FileInputStream(new File("Messages.properties")));
      System.out.println(p.getProperty("UNKNOWN_OPTION"));
}catch (IOException ex) {   
      ex.printStackTrace();   
}

agradeço pela atenção pessoal,
Rafael Hornung

o valor das propriedades dentro do arquivo devem ser separados por espaço, virgula, ponto e virgula…

prop 1,2,3

ou

prop 1;2;3

ou

prop 1 2 3

tenta ver isso…

Vc pode usar o replace da classe String ou por RegEx…
Sinta-se a vontade para a solução! rs

Use a classe java.text.MessageFormat para substituir os {0}, {1} etc. Não é preciso usar regex (se bem que MessageFormat tem um pequeno problema em Java 1.3 ou anterior, porque nessas versões antigas do Java, MessageFormat só aceita os números de 0 até 9.)

valeu ai galera, achei outra solucao aqui tb,

UNKNOWN_OPTION = Unkown %-option '#'   
UNEXPECTED_CHAR = Unexpected character '#'   
UNEXPECTED_NL = Unexpected character <newline> '#'
Properties p = new Properties();
p.load( new FileInputStream(new File("Messages.properties")));
String m = p.getProperty("UNKNOWN_OPTION");
m = m.replace('#', 'a');
System.out.println(m);

o unico problema é que a parte do texto a ser trocado pode ser apenas caracter, vou dar uma olhada nas outras solucoes propostas, obrigado pessoal

o replace da class String pode receber duas Strings também

String original = "Meu nome é '#'";
String nova = original.replace("'#'","Marcos");
System.out.println(nova);

[quote=Mark_Ameba]o replace da class String pode receber duas Strings também

String original = "Meu nome é '#'"; String nova = original.replace("'#'","Marcos"); System.out.println(nova); [/quote]

valeu pela dica, com isso consigo fazer oq eu queria, valeu mesmo

Vamos lidar com várias formas de trocar um "{0}", "{1}" etc. por strings apropriadas.
Você pode usar MessageFormat, String.format (Java 5) ou String.replaceAll.

Usando MessageFormat: (Java >= 1.1)

String s = MessageFormat.format (&quot;Troque o seu carro {0} por um {1} para não se encontrar com a Lady Murphy&quot;, 
    new Object[]{ &quot;Ford&quot;, &quot;Fiat&quot; });

Usando String.format (Java >= 5.0):

String s = String.format (&quot;Troque o seu carro %1$s por um %2$s para não se encontrar com a Lady Murphy&quot;, 
    &quot;Ford&quot;, &quot;Fiat&quot;);

Usando String.replaceAll (nesse caso você não pode trocar mais de uma coisa por vez) (Java >= 1.4):

String s = &quot;Troque o seu carro {0} por um {1} para não se encontrar com a Lady Murphy&quot;.replaceAll (&quot;\\{0\\}&quot;, &quot;Ford&quot;).replaceAll (&quot;\\{1\\}&quot;, &quot;Fiat&quot;);

Fica à sua escolha.