Formatando strings

9 respostas
Rafael_ap

Alguém saberia como formatar uma string numérica para receber os pontos dos milhares.
Por exemplo, eu recebo a string 1092092 e devolvo 1.092.092

Se alguém souber só como eu recebo a string e a partir dela crio um array com os caracteres
sem usar loops, só com algum método pronto, já ajudaria.

Eu consegui fazer do meu jeito, mas tenho a sensação de que foi muito código e de um jeito confuso.

9 Respostas

ViniGodoy

Converta a String para um número. Formate com o printf ou com o DecimalFormat.

String x = "1092092";
Integer valor = Integer.parseInt(x);

NumberFormat nf = new DecimalFormat ("#,###,##0", new DecimalFormatSymbols (new Locale ("pt", "BR")));  
String formatado = nf.format(valor);

O método toCharArray() da classe String retorna um array de chars com todos os caracteres da String. Sempre leia o javadoc quando tiver dúvidas desse tipo.

Rafael_ap

Caramba, eu usei 50 linhas.

Valeu mesmo Vini.

ViniGodoy

Por que seu número está numa String?

Dá para fazer em uma linha, se eu não me engano fica assim:

String x = "1092092"; return String.format(",.0f", Double.parseDouble(x));

É bom conhecer o que o prinf e o format podem fazer por você:
http://download.oracle.com/javase/6/docs/api/java/util/Formatter.html

WendersonLP

Que simples!

Rafael_ap

Mas eu precisaria de um código que fincionasse para uma string de qualquer
tamanho de caracteres.

Rafael_ap

E está numa String por que definiram assim.

ViniGodoy

Nesse caso dá pra fazer no braço também:

String x = "1092092109209210920921092092109209210920921092092109209109209210920922";

StringBuilder sb = new StringBuilder();
int c = 0;
for (int i = x.length - 1; i >= 0; i--)
   sb.insert(0, x.charAt(i));
   c = (c + 1) % 3;
   if (c == 0 && i != 0) {
      sb.insert(0, ".");
   }
}
return sb.toString();

Mas só é vantagem se você imaginar que o String nunca vai caber num campo numérico.

Rafael_ap

É, está dando um erro no código:

O meu código tá assim:

public class Testao {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		String x = "410681273";
		StringBuilder sb = new StringBuilder();  
	    int c = 0;  
	    for (int i = x.length(); i >= 0; i--)  {
	       sb.insert(0, x.charAt(i));  
	       c = (c + 1) % 3;  
	       if (c == 0) {  
	         sb.insert(0, ".");  
	      }  
             System.out.println( sb.reverse().toString());
	   }
}

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 9 at java.lang.String.charAt(Unknown Source) at Testao.main(Testao.java:12)

Estou tentando descobrir, mas parece algo simples

ViniGodoy

Ops, desculpe, era int i = x.length - 1.

Já corrigi ali em cima.

Criado 21 de agosto de 2010
Ultima resposta 22 de ago. de 2010
Respostas 9
Participantes 3