StringTokenizer ou String.split()?

6 respostas
T
Olá pessoal. Eu andei procurando aqui no fórum e vi que tem alguns tópicos que muitos preferem utilizar o String.Split(), qual seria a razão? O StringTokenizer está em desuso? Para o meu caso, com String.split(), eu consigo separar o conteúdo de um arquivo texto em linhas e depois por espaço em branco? Exemplo:
// valores por linha
String[] valores;
valores = new linha.split(System.getProperty("line.separator"));

// espaço em branco:
String[] valores;
valores = new linha.split(" ");

6 Respostas

tnaires

tamanini:
Olá pessoal.
Eu andei procurando aqui no fórum e vi que tem alguns tópicos que muitos preferem utilizar o String.Split(), qual seria a razão? O StringTokenizer está em desuso?
Para o meu caso, com String.split(), eu consigo separar o conteúdo de um arquivo texto em linhas e depois por espaço em branco?

Consegue sim. O método split() recebe como parâmetro uma expressão regular contendo o(s) separador(es). Dê uma olhada na documentação:

http://java.sun.com/javase/6/docs/api/java/lang/String.html#split(java.lang.String)

Particularmente, eu acho o método split() muito mais simples, principalmente depois que implementaram o for each em Java.

shoko

Na minha opinião os dois são bons porém o split é mais fácil de se manipular pois retorna um array de string!

T

Bem, decidi utilizar o split(), mas estou com problemas.
O que eu estou fazendo de errado no código abaixo?

final String NOVA_LINHA = System.getProperty("line.separator")

conteudo = lerArquivoTexto(caminho); 
linhaDoTexto = conteudo.split(NOVA_LINHA);
		
//  linha = nome do grafo
setNomeGrafo(linhaDoTexto[0]);

for (String linha : linhaDoTexto) { 
	// na linha contém o valor: "# No8"		
	valor = linha.split(" ");
				
	if (valor[0] == "#") {     // nunca é verdadeiro essa condição
		noSaida = valor[1]; // com isso não passo o nome "No8"
		inseriNo(noSaida);
tnaires

O problema é a comparação das strings:

Você está fazendo

if (valor[0] == "#") {     // nunca é verdadeiro essa condição

Quando devia fazer:

if ("#".equals(valor[0])) {     // nunca é verdadeiro essa condição
T

Era isso mesmo. Vlw.
Só para entender melhor, no caso, eu não consigo comparar com “==”, pelo fato da variável valor ser uma String, com isso, para comparar um objeto String tenho que utilizar o método equals(), é isso?
“==” é apenas para tipos primitivos?

tnaires

No caso de objetos, o operador == compara os endereços de memória nos quais o objeto reside. Então, o uso de == para comparar strings não verifica seus conteúdos, mas sim, os endereços de memória correspondentes.

Resumindo: sim, use == apenas para tipos primitivos.

Criado 23 de junho de 2008
Ultima resposta 24 de jun. de 2008
Respostas 6
Participantes 3