Seguinte, achei um contador de palavras simples e fácil, mas ainda nao ficou claro com a função de .trim().split()
[code]public class contador {
public static void main(String args[])
{
Scanner input = new Scanner(System.in);
System.out.println("Digite uma frase: ");
String frase = input.nextLine();
String palavras[] = frase.trim().split(" ");
System.out.println("Numero de palavras: " + palavras.length);
}
}[/code]
Pelo o que pesquisei, e vi, nesse caso após a frase ser digitada, ele é “separado” dos espaços (trim) e é cortado em palavras (split), criando um array e no final ele só da o tamanho do array, assim tendo a contagem de palavras. ou entendi errado?
muito obrigado
O método trim() remove o espaço em branco no ínicio e no final de uma string. Após feito isso, é chamado o método split() que retorna um array de String separando as palavras por espaço ou qualquer outro delimitador que vc preferir.
Sobre o tamanho do array, vc está certo.
ou seja se eu escrevo uma frase qualquer: “Oi eu estou aprendendo java.”
o trim ira “cortar” a frase, fazendo ela ter exatamente esse tamanho, sem espacos antes e depois (".Oi eu estou aprendendo java.") pontos simbolizam espacos “cortados”
e o split ira cortar as palavras e fazer um array (".Oi. .eu. .estou. .aprendendo. .java.")
criando um array de no caso tamanho 5
e dando o tamanho do array temos o resultado.
Seria isso?
obrigado
[quote=TintinSt]ou seja se eu escrevo uma frase qualquer: “Oi eu estou aprendendo java.”
o trim ira “cortar” a frase, fazendo ela ter exatamente esse tamanho, sem espacos antes e depois (".Oi eu estou aprendendo java.") pontos simbolizam espacos “cortados”
e o split ira cortar as palavras e fazer um array (".Oi. .eu. .estou. .aprendendo. .java.")
criando um array de no caso tamanho 5
e dando o tamanho do array temos o resultado.
Seria isso?
obrigado[/quote]
Isso mesmo, como você afirmou
O trim retira espaços em branco da esquerda e direita da String
O split cria um array mediante a uma condição para quebra da sua String
Detalhe é que aí são duas funções, não uma só.
O trim() é aplicado sobre a String, e por sua vez retorna uma String.
O split() é um método chamado na String de retorno. Ele retorna um array de Strings.
Somente ilustrando o uso do trim(); em uma String
public class TesteTrim {
public static void main(String[] args) {
String fraseComEspaco = " java java ";
System.out.println("Tamanho Frase com espaço: " + fraseComEspaco.length());
System.out.println("Tamanho Frase sem espaço: " + fraseComEspaco.trim().length());
}
}
Saida:
Tamanho Frase com espaço: 14
Tamanho Frase sem espaço: 10
nesse exemplo os 2 espaços antes do inicio da frase e os dois espaços após o termino da frase são cortados pelo método trim() e o espaço que esta entre as palavras “java” é ignorado pelo trim(), permitindo assim que você use o caractere " " como delimitador para que o split corte a String e como o Vini Godoy disse, qualquer Obejeto da classe String é imutavel sendo assim toda essa manipulação não altera a String que você está manipulando e sim retorna uma nova String com o resultado esperado.
caso sua duvida tenha sido resolvida por favor altere o titulo do topico para [RESOLVIDO]
obrigado estendi.
Mas surgiu mais uma dúvida e aproveitando o tópico…
se coloco 2 espacos no meio exemplo “Oi (2 espacos) estou (3 espacos) aprendendo (2 espacos) java”
ele le o espaco como uma palavra.
tem algum jeito de tirar isso?
tava pensando em algo pouco diferente com trim, indexOf e substring… mas nao consegui chegar a um código ainda…
Teste fazer um split em " +".
E leia sobre expressões regulares:
http://www.regular-expressions.info/tutorial.html
fala TintinSt!
o método split aceita uma regular expression como argumento… se você colocar split(" +"), ele corta caso haja um ou mais espaços.
Para facilitar a legibilidade do código pode ser interessante usar um caractere predefinido (meta caractere) ao invés de um espaço em branco: String[] palavras = frase.trim().split("\\s+");
Nesse caso, o caractere pré-definido é o “\s” que é o mesmo que um espaço em branco. A barra invertida que precede o meta caractere de espaço serve para que ele não seja identificado como um caractere de escape (como “\n”) e o sinal de + (adição) após o meta caractere diz que você espera uma ou mais repetições desse caractere. Ou seja, o método split() vai separar as palavras da sua string sempre que encontrar um ou mais espaços em branco.
Assim como o Vini sugeriu, acho interessante estudar um pouco sobre expressões regulares:
http://docs.oracle.com/javase/tutorial/essential/regex/index.html