Bom dia pessoal estou com uma duvida no Stringtokenizer
fiz uma apliacao que pega um arquivo do tipo properties q contem text = a;b;c;d;e;f e number = 1;2;3;4;5;6
eu consigo ler esse arquivo normalmente mais quando eu uso o string tokenizer para separar a; b; c;… ele nao separa ele imprimi normal
sera que alguem poderia me ajudar?
obrigado
o codigo:
import java.io.IOException;
import java.util.Properties;
import java.util.StringTokenizer;
public class main {
public static void main(String[] args) {
//cria uma variavel props do tipo properties
Properties props = System.getProperties();
try {//tenta pegar um arquivo do computador
//variavel props recebe conteudo de arquivo example
props.load( ClassLoader.getSystemResourceAsStream("example.properties") );
} catch (IOException e) {//caso ocorra algum erro ele imprime o erro que deu
e.printStackTrace();
}
String str = props.getProperty("text");
//variavel st recebe valor que esta em text da variavel props
StringTokenizer st = new StringTokenizer(str, " ");
//variavel st2 recebe valor que esta em number da variavel props
StringTokenizer st2 = new StringTokenizer(props.getProperty("numbers", " " ));
while (st.hasMoreTokens()){//repete enquanto st conter elementos
System.out.println(st.nextToken());//imprime elemento de st e vai para proximo
}//parada do while
while (st2.hasMoreTokens()){//repete enquanto st2 conter elementos
System.out.println(st2.nextToken());//imprime elemento de st2 e vai para proximo
}//parada do while
//cria um stringbuffer stn para receber o valor numbers da variavel props
StringBuffer stn = new StringBuffer(props.getProperty("numbers"));
//pega o conteudo da variavel stn e invete ela
stn.reverse();
//imprime conteudo de stn
System.out.println(stn);
//cria um stringbuffer stt para receber o valor text da variavel props
StringBuffer stt = new StringBuffer(props.getProperty("text"));
//pega conteudo de stt e inverte ele
stt.reverse();
//imprime conteudo de stt
System.out.println(stt);
}
}
O segundo argumento do construtor do StringTokenizer é o separador que você quer utilizar. No seu caso, pelo que vi, o seu arquivo é separado por “;”, mas você está mandando o StringTokenizer separa por " " (espaço em branco). Mude o contrutor do StringTokenizer para:
StringTokenizer st = new StringTokenizer(str, ";");
Seu código foi escrito em Java 1.4 ou inferior? Muita coisa mudou desde o Java 5.
No lugar do StringTokenizer, use o método split da classe String.
O tokenizer não é a aconselhado pela Sun (veja o próprio javadoc da classe StringTokenizer, que diz que ela não deve ser usada). O split também vai dar uma boa simplificada nesse seu código.
A Sun também aconselha usar StringBuilder no lugar do StringBuffer.
import java.io.IOException;
import java.util.Properties;
public class main {
public static void main(String[] args) {
//cria uma variavel props do tipo properties
Properties props = System.getProperties();
try {//tenta pegar um arquivo do computador
//variavel props recebe conteudo de arquivo example
props.load( ClassLoader.getSystemResourceAsStream("example.properties") );
} catch (IOException e) {//caso ocorra algum erro ele imprime o erro que deu
e.printStackTrace();
System.exit(1);
}
for (String txt : props.getProperty("text").split(";")) {
System.out.println(txt);//imprime elemento de st e vai para proximo
}
for (String number : props.getProperty("numbers").split(";")) {
System.out.println(number);//imprime elemento de st2 e vai para proximo
}
//cria um stringbuffer stn para receber o valor numbers da variavel props
StringBuilder stn = new StringBuilder(props.getProperty("numbers"));
//pega o conteudo da variavel stn e inverte ela
stn.reverse();
//imprime conteudo de stn
System.out.println(stn);
//cria um stringbuffer stt para receber o valor text da variavel props
StringBuilder stt = new StringBuilder(props.getProperty("text"));
//pega conteudo de stt e inverte ele
stt.reverse();
//imprime conteudo de stt
System.out.println(stt);
}
}