Estou com um problema para guardar as palavras de um texto em um vetor. Estou usando o StringTokenizer com separador (" ") para separar as palavras, mas quando chega no final da linha, e junta na mesma posição, a última palavra dessa linha com a primeira da próxima linha, tentei fazer um while pra separar os espaços e um while dentro desse verificando se o token possui (\n) que não funcinou. Como faria pra seperar fazendo 2 verificações? Segue código de como eu tava tentando. A string_palavras existe, só pra economizar espaço aqui.
StringTokenizer separadorEspaco = new StringTokenizer(string_palavras(), " "); //separador para os espacos
List<String> palavras = new LinkedList<String>();
StringTokenizer separadorEnter = new StringTokenizer(publicacoesCliente.toString(), "\n"); //separador para as quebras de linha
String tmpToken1=""; //verifica espaco entre as palavras
while (separadorEspaco.hasMoreTokens()){
tmpToken1 = separadorEnter.nextToken();
if (tmpToken1.contains("\n")){ //se encontrar \n então é a útilma palavra da linha junto com a 1a da próxima linha, então separa tmb. nao funcionou
while (separadorEnter.hasMoreTokens()){
palavras.add(separadorEnter.nextToken());
}
}else{ //se nao tiver o \n entao continua separando normalmente as palavras
palavras.add(tmpToken1+" ");
}
}
A primeira dica que te dou é sempre dar uma lida no javadocs ao usar uma classe.
Na documentação do StringTokenizer, por exemplo, indica que é recomendável utilizar o método split da classe string no lugar dela.
O split vai te retornar um array de strings, como você quer, e recebe uma expressão regular como parâmetro de entrada.
Com uma expressão regular, você pode usar o código \s para indicar que quer qualquer espaço em branco, inclusive quebras de linha.
Em resumo seu código ficaria:
String palavras = string_palavras().split("\\s+")
Observações:
-
Utilize camelCase no nome dos seus métodos pois é a convenção do Java. Ao invés de “string_palavras” utilize “stringPalavras” ( na verdade, prefira nomes mais descritivos para seus métodos)
-
Existe duas barras ali porque uma serve de escape para a string do java em si.
-
O + no final, agrupa vários espaços em branco (e quebras de linha) em um espaço só. Assim seu array não terá entradas vazias.
Obrigado pela dica, não sabia que o split do java recebia expressão regular.
Vou testar aqui e volto com o resultado
Vlwwww.
Funcionou 100%. Resolvido
[quote=lucasdona]Obrigado pela dica, não sabia que o split do java recebia expressão regular.
Vou testar aqui e volto com o resultado
Vlwwww.[/quote]
Por isso mesmo se lê javadoc. Você iria até o método split, e veria lá que está escrito:
Embora o próprio exemplo do split no alerta da classe StringTokenizer também já mostre uma Regex.