Problema com split

public static String transformaValor(String valor) {
		String[] split = valor.split(".");
		return split[0] + "," + split[1];
	}

supor que o valor seja “12.34”. O array split fica com 0 posições. Alguém sabe porque?

Isso acontece porque o método split() da classe String recebe uma String que será interpretada como uma expressão regular, e em expressão regular, o ponto significa qualquer caracter.
No seu caso, se você passa “.” como parâmetro do método split para a String “12.34”, o split será feito usando todos os caracteres da sua String, fazendo com que ela não seja dividida.
Dá uma melhor estudada sobre expressões regulares e sua aplicação no Java que até possa encontrar uma explicação melhor da que eu te dei…

[]'s.

Se vc receber uma string que não tenha “.” teu split só vai ter a posição 0 e vai dar um erro maluco.

Seria melhor vc usar um replace da classe String ou … formatar o valor usando alguma coisa específica.

public class A{ public static void main(String [] args){ String x = "12.34"; String y = x.replace(".",","); System.out.println(x + " -> " + y); } }

Olá edpittol blz…

Faz como o peczenyj disse, faz um replace do seu “.” para algum outro caracter como por exemplo, “,”, “-”, etc…

Após isso é só vc realizar o split q funcionará sem problemas.

Abraços.

Não é necessário fazer replace. Isso é gambiarra.
Simplesmente use a expressão regular que representa o ponto em si mesmo


String[] array = str.split("\.");

Po, gambiarra é usar split pra trocar , por . usando concatenação de strings e deixando de verificar o tamanho do array gerado pelo split.

Po, gambiarra é usar split pra trocar , por . usando concatenação de strings e deixando de verificar o tamanho do array gerado pelo split.[/quote]

concerteza. Mas infelizmente o titulo do topico é “Problema com split” e o problema é a falta de entendimento do que é um javadoc, do que é uma expressão regex e de que java não é VB.
O que ele faz com o array não é o problema …

Não sabia que a expressão regular do Java trata “.” como qualquer caracter e não conhecia o método replace da classe String. Para meu casa é mais útil usar o replace.

Fico grato pelas ajuda. vlw

abrass

[quote=sergiotaborda]Não é necessário fazer replace. Isso é gambiarra.
Simplesmente use a expressão regular que representa o ponto em si mesmo


String[] array = str.split("\.");

[/quote]

na verdade isso seria tentar um cast no ponto.

  • correto seria:
String[] array = str.split("\.");