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();
}
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.)
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
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.
String s = MessageFormat.format ("Troque o seu carro {0} por um {1} para não se encontrar com a Lady Murphy",
new Object[]{ "Ford", "Fiat" });
Usando String.format (Java >= 5.0):
String s = String.format ("Troque o seu carro %1$s por um %2$s para não se encontrar com a Lady Murphy",
"Ford", "Fiat");
Usando String.replaceAll (nesse caso você não pode trocar mais de uma coisa por vez) (Java >= 1.4):
String s = "Troque o seu carro {0} por um {1} para não se encontrar com a Lady Murphy".replaceAll ("\\{0\\}", "Ford").replaceAll ("\\{1\\}", "Fiat");