Galera, estou tentando fazer com que o programa leia uma string e me diga quantas vezes encontrou determinada letra, que armazene esse numero numa variavel. Daí, quero criar um array de Strings cujo tamanho deste array seja o numero armazenado na variavel. Ate encontrar os caracteres tudo deu certo, mas nao sei como implementar o resto.
public class testeEncontra {
public static void main(String [] args){
String A = "testado";
int cont = 1;
int n = cont;
for ( int b=0 ; b < A.length(); b++){
if(A.charAt(b)== 't'){
cont++;
System.out.println(cont);
}
}
}
}
vejamos
String palavra = "testado"; // tem 2 letras t né?
char letra = 't'; // o que queremos procurar, né?
int contador = 0; // se nao tem nada, é zero né?
for(int i=0;i< palavra.length(); i++ ) {
if( palavra.charAt(i) == letra ) {
contador++;
}
}
System.out.println("a palavra '" + palavra + "' tem " + contador + " vezes a letra "+ letra );
simples né? basta usar o loop ao seu favor
Acho que nao me expressei bem. Veja, a variavel contador me retorna a quantidade de vezes que a letra ‘T’ foi encontrada na String. O que eu quero é criar um array cujo numero de posições seja igual a ‘t’. Se eu tiver 4 letras T, seria por exemplo array teste[4], se fosse encontrada a letra ‘t’ 10 vezes seria array[10]. Entendeu ?
É isso que nao sei como fazer.
e qual a dificuldade de fazer
String x[] = new String[numero];
?
Pois é…como estou tentando aprender ainda tem coisas que nao sei como devem ser feitas. Nao conheço muito da linguagem. nese caso específico mesmo nao sei onde inserir essa insntrução. Pegando a sua sugestão tentei fazer assim :String palavra = "testado"; // tem 2 letras t né? char letra = 't'; // o que queremos procurar, né? int contador = 0; // se nao tem nada, é zero né? for(int i=0;i< palavra.length(); i++ ) { if( palavra.charAt(i) == letra ) { contador++; String meuArray[] = new String[contador]; } }
Mas nao deu certo.
experimenta declarar fora do laço for
Sei que posso estar abusando, mas…Nao apareceu mais o sinal de erro. Porem, executando nao aparece nada de diferente. Agora me deparei com o seguinte problema: como jogar valores nesse array ? Acho que seria a unica forma de testar se esta certo ou nao.
Como poderiamos fazer esse teste ?
Agora executei e deu o seguinte erro:
“erro ao fazer o parsing do arquivo.”
Então, copiei seu código e fiz essa modificação e depois compilei. Veja se é isso que vc queria?
public static void main(String[] args) {
// TODO code application logic here
String palavra = “testado”; // tem 2 letras t né?
char letra = ‘t’; // o que queremos procurar, né?
int contador = 0; // se nao tem nada, é zero né?
for (int i = 0; i < palavra.length(); i++) {
if (palavra.charAt(i) == letra) {
contador++;
}
}
String meuArray[] = new String[contador];
System.out.println(meuArray.length);
}
}
1 curtida
Amigão, outra maneira de fazer, é convertendo a mensagem / palavra para um array de caracteres com o método toCharArray()
É simples, veja:
public static void main(String[] args) {
// mensagem
String mensagem = "Grupo de usuários Java";
// convertendo a mensagem para um array de caracteres
char[] caracteres = mensagem.toCharArray();
// caractere a ser buscado
char c = 'a';
// contador (vai armazenar o número de caracteres buscado)
int qtde = 0;
for (int i = 0; i < caracteres.length; i++) {
if (caracteres[i] == c)
qtde++;
}
//aqui estamos criando um vetor cujo tamanho é a quantidade de letras 'a' encontradas
String[] arrayNovo = new String[qtde];
System.out.println(qtde);
}
O saída da execução desse código foi: 2
Lembre-se que caracteres com acentos são diferentes de caracteres sem acentos.
1 curtida
Ok…o programa rodou, fiz outra alteração tentando o seguinte: toda vez que encontrasse o “ponto-e-virgula” na String A, ele incrementaria o contador, que seria o numero de posições do array. Depois tentei usar o metodo Split pra que o programa entendesse que cada “ponto-e-virgula” seria o fim de um paragrafo a ser armazenado na variavel meuArray. Assim, na posição 0 teria Esse é meu texto, na 1 Porem, continua dando problemas e na posiçao 2 Só não sei o que é.
Mas deu erro novamente.
public static void main(String [] args){
String A = “Esse é meu texto; Porem, continua dando problemas; Só não sei o que é”;
int cont = 0;
int n = cont;
String meuArray[] = new String[n];
for ( int b=0 ; b < A.length(); b++){
if(A.charAt(b)== ';'){
cont++;
String meuArray[] = A.split(";");
System.out.println(meuArray);
Veja bem, primeiro da erro na linha: String meuArray[] = A.split(";"); O sistema diz que a variavel meu array já esta definida no metodo main.
Tirei a declaração da variavel no metodo main, o erro sumiu, porem, ao executar a instrução, System.out.println(meuArray) o que apareceu foi:
run:
[Ljava.lang.String;@1db9742
[Ljava.lang.String;@106d69c
CONSTRUÍDO COM SUCESSO (tempo total: 0 segundos)
ou seja, nao imprimiu o que eu queria, que era os tres paragrafos, cada um encontrado antes do “ponto-e-virgula”.
Fiz um teste numa outra classe e deu certo imprimir, mas de uma maneira diferente, sem arrays, veja :
public class PercorreString1 {
public static void main( String args[])
{
String texto = " Esse é meu texto; Porem, continua dando problemas; Só não sei o que é";
String palavras[] = texto.split(";");
JOptionPane.showMessageDialog(null, palavras);
Veja bem, você está chamando apenas o array, sem informar o índice a ser acessado.
O valor retornado @1db9742
é um endereço hexadecimal utilizado pelo Java para buscar seu vetor na memória.
Quando você chama JOptionPane.showMessageDialog(null, palavras);
, você está pedindo para que ele retorne apenas o endereço, mas não o valor dentro de alguma posição.
Para mostrar o valor de certa posição do array, você deve chamar também o índice. Troque sua linha de saída por: JOptionPane.showMessageDialog(null, palavras[0]);
. Repare que palavras[0]
é o vetor palavras na primeira posição. Lembrando que o índice começa a partir do zero.
Para mostrar todos os valores do vetor, é necessário criar um laço para percorre-lo e acessar valor por valor.
for (int i = 0; i < palavras.length; i++) {
JOptionPane.showMessageDIalog(null, palavras[i]);
}
}
Basicamente é isso. Qualquer dúvida posta aí.
quando fiz:
public class PercorreString1 {
public static void main( String args[])
{
String texto = " Esse é meu texto; Porem, continua dando problemas; Só não sei o que é";
String palavras[] = texto.split(";");
JOptionPane.showMessageDialog(null, palavras);
o sistema mostrou todos os elementos do array PALAVRAS. Ele executou o metodo Split e fez exatamente o que eu queria. Já no outro exemplo, eu tentei usar a mesma funcionalidade, da forma abaixo:
public static void main(String [] args){
String A = “Esse é meu texto; Porem, continua dando problemas; Só não sei o que é”;
int cont = 0;
int n = cont;
String meuArray[] = new String[n];
for ( int b=0 ; b < A.length(); b++){
if(A.charAt(b)== ';'){
cont++;
String meuArray[] = A.split(";");
System.out.println(meuArray);
Nesse caso eu tenho uma String A, com o meu texto. Usei o metodo charAt para que o sistema procurasse o caractere "ponto-e-virgula, e me dissesse quantas vezes ele o encontrou. O numero de posições do array meuArray é o mesmo numero de vezes que o caractere foi encontrado na String. Aí, eu usei o Split para que o sistema colocasse cada parte do texto em uma posição do Array.
E isso nao deu certo. Exatamente isso que nao entendi
É o que eu disse acima. Você não está indicando qual elemento do array mostrar.
Coloque System.out.println(meuArray[0]);
Se você colocar apenas System.out.println(meuArray)
, ele não irá mostrar elemento algum, pois você não indica o índice.
mas entao porque no exemplo anterior funcionou ? como falei, nesse código
public static void main( String args[])
{
String texto = " Esse é meu texto; Porem, continua dando problemas; Só não sei o que é";
String palavras[] = texto.split(";");
JOptionPane.showMessageDialog(null, palavras);
veja que digo apenas mostre PALAVRAS, que é o nome do array, e o sistema mostrou cada paragrafo em suas posições no array.
eu nao entendi pq vc faz um split da string dentro do laço for, ou vc faz uma coisa ou outra. que tal vc explicar o que vc quer fazer de forma mais clara ?
Impossível este código ter funcionado da maneira correta.