Substituir caracteres em uma String [Resolvido]

5 respostas
dyeimys

Boa noite,
Eu gostaria de ter uma luz sobre um problema, vamos lá:
Eu tenho uma valor guardado em um arquivo properties, onde este é:

vitoria = Parabéns, você venceu!\n Você venceu na tentativa ? de ?\n Com o tempo de ?

Eu gostaria que esta String quando aparecesse no lugar dos caracteres “?” um valor (Isto quando eu for utilizar elas). No caso ela seria mostrada da seguinte forma:

//Valores passados são {10,25,9:14}
Parabéns, você venceu!
Você venceu na tentativa 10 de 25
Com o tempo de 9:14

Eu conheço esta interface PreparedStatement que recebe uma instancia de um método da classe Connection que é passado como parametro uma String e vários valores para preencher o local destes caracteres “?”
Existe algo do tipo fora da uma classe que trabalha com persistência?
PS. Existem cerca de 40 valores no arquivo citado acima - Ele está usando para trabalhar com i18n

5 Respostas

BrunoFurtado
// recebendo dados de arquivo properties
String vitoria = "Parabéns, você venceu!\n Você venceu na tentativa ? de ?\n Com o tempo de ?";
int qtdeValores = 0;
		
// verificando quantos valores sao necessarios
for (int i = 0; i < vitoria.length(); i++) {
	if (vitoria.charAt(i) == 63)
	qtdeValores++;
}
		
// criando e populando valores ficticios
String[] valores = new String[qtdeValores];
		
for (int i = 0; i < qtdeValores; i++)
	valores[i] = "[valor" + i + "]";
		
// substituindo valores
for (String valor : valores)
	vitoria = vitoria.replaceFirst("\\?", valor);
			
System.out.println(vitoria);

Veja se isso ajuda cara…

berg.pb

Olá.

Então, como a String original vem de outro lugar de um .properties, e vc não pode alterá-la, proponho duas soluções mais simples:

1) alterar o arquivo properties, mudando na String original por valores, como min, max, time (por exemplo). Daí, vc teria um método mais simples que faria o replace direto.

private print setMessage(String min, String max, String time) {

   //texto que veio do properties
   vitoria = "Parabéns, você venceu!"
                   + "\nVocê venceu na tentativa min de max "
                   + "\nCom o tempo de time.";

   vitoria = vitoria.replace("min", min).replace("max", max).replace("time", time);
   System.out.println(vitoria);
}
2) Uma outra solução, baseada naquilo que o BrunoFurtado postou. Se vc não tem como modificar o properties, e como vc já sabe quais são os itens que serão alterados:
private print setMessage(String [] values) {
   //texto que veio do properties
   vitoria = "Parabéns, você venceu!"
                   + "\nVocê venceu na tentativa ? de ? "
                   + "\nCom o tempo de ?.";

   //no values, vc insere os valores para min, max e time, como no exemplo anterior
   for (String v:values) {
             vitoria = vitoria.replaceFirst("\\?", v);
   }
   System.out.println(vitoria);
}

Ps.: Usando o for, vc usa mais tempo de processador, mesmo que vc não perceba.

Espero ter podido ajudar. Abcs

T
Acredito que ficaria legal :

import java.text.MessageFormat;



MessageFormat.format(Parabéns, você venceu!\n Você venceu na tentativa {0} de {1}\n Com o tempo de {2},min,max,time);
Rodrigo_Sasaki
<blockquote><div class="quote-author">tiozao_bp:</div>Acredito que ficaria legal :

import java.text.MessageFormat;



MessageFormat.format(Parabéns, você venceu!\n Você venceu na tentativa {0} de {1}\n Com o tempo de {2},min,max,time);</blockquote>

Lendo as outras respostas eu estava prestes a sugerir isso <img src="https://cdn.jsdelivr.net/gh/twitter/twemoji@14/assets/72x72/s.pnglight_smile.png?v=9" title=":slight_smile:" class="emoji" alt=":slight_smile:">

Teve uma vez que eu ia fazer algo parecido e acabei fazendo algo na mão por não conhecer a classe MessageFormat, conhecer a API é o segredo :slight_smile:

dyeimys

Muito obrigado pessoal,
A questão de fazer a mão é a que estou fazendo, porém eu queria saber se tinha um API nativa para trabalhar com isto. Para ver se melhora o custo computacional do meu sistema.
Agora é estudar a API.

Novamente, obrigado pessoal

Criado 18 de janeiro de 2013
Ultima resposta 18 de jan. de 2013
Respostas 5
Participantes 5