StringTokenizer para separar espaço e enter [RESOLVIDO]

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 :slight_smile:
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 :slight_smile:
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.