Qual o problema?

Olá pessoal

Estou tentando tirar os espaços em branco de uma String e colocar as letras dentro de um vetor…mas nao está dando certo

segue o codigo:

[code]import java.util.*;

public class Exerc_01 {

public static void main(String[] args) {

	Scanner leia = new Scanner(System.in);

	String frase;
	System.out.println("Escreva uma frase:");
	frase = leia.nextLine();

	int count = 0;

	for (int i = 0; i < frase.length(); i++) {
		char nospace = frase.charAt(i);
		if (nospace == ' ') {
			count++;
		}
	}

	char vetor[] = new char[frase.length() - count];
	

	for (int i = 0; i < vetor.length; i++) {

		char nospace = frase.charAt(i);
		if (nospace != ' ') {
			vetor[i] = nospace;
		}
	}

	for (int i = 0; i < vetor.length; i++) {
		System.out.print(vetor[i]);
	}

}

}
[/code]

Cara… simplifica isso aí… depois que vc receber a frase, tire todos esses for, cont, etc e troque por essa linha de código:

frase.replaceAll(" ", "");

Com isso vc tira TODOS os espaços em branco e coloca um vazio no lugar

[quote=diego.ldn]Olá pessoal

Estou tentando tirar os espaços em branco de uma String e colocar as letras dentro de um vetor…mas nao está dando certo[/quote]

Boa tarde diego,

Fazendo da forma que nosso amigo acima citou, ficaria da seguinte forma:

		Scanner leia = new Scanner(System.in);
		String frase;
		System.out.println("Escreva uma frase:");
		frase = leia.nextLine();
		String nospace = frase.replace(" ", "");
		char vetor[] = new char[nospace.length()];

		for (int i = 0; i < vetor.length; i++) {
				char letra = nospace.charAt(i);
				vetor[i] = letra;
				System.out.println(vetor[i]);
		}	

O replace tem que ser usado antes da criação do vetor, caso contrario é criado um vetor com os espaços em branco, e depois quando for adicionar as letras ao vetor você vai adicionar sem os espaços em branco, o que vai gerar uma exception no método charAt() que vai tentar pegar uma letra que está vazia.

Nesse caso ismaelsoj é necessario o uso de um for para percorrer o vetor e adicionar as letras !

Espero ter ajudado! :smiley:

Falo.

[quote=RodrigoM91][quote=diego.ldn]Olá pessoal

Estou tentando tirar os espaços em branco de uma String e colocar as letras dentro de um vetor…mas nao está dando certo[/quote]

Boa tarde diego,

Fazendo da forma que nosso amigo acima citou, ficaria da seguinte forma:

		Scanner leia = new Scanner(System.in);
		String frase;
		System.out.println("Escreva uma frase:");
		frase = leia.nextLine();
		String nospace = frase.replace(" ", "");
		char vetor[] = new char[nospace.length()];

		for (int i = 0; i < vetor.length; i++) {
				char letra = nospace.charAt(i);
				vetor[i] = letra;
				System.out.println(vetor[i]);
		}	

O replace tem que ser usado antes da criação do vetor, caso contrario é criado um vetor com os espaços em branco, e depois quando for adicionar as letras ao vetor você vai adicionar sem os espaços em branco, o que vai gerar uma exception no método charAt() que vai tentar pegar uma letra que está vazia.

Nesse caso ismaelsoj é necessario o uso de um for para percorrer o vetor e adicionar as letras !

Espero ter ajudado! :smiley:

Falo.[/quote]

É verdade, RodrigoM91… postei numa hora onde não podia exemplificar com código, mas tá certinho… :slight_smile:

Apesar das soluções acima funcionarem, acredito se tratar de trabalho de faculdade, portanto o uso dessas funções deve ser restrito.

O jeito mais simples sem limitação seria:

char[] vetor = frase.replace(" ", "").toCharArray()

No seu caso, há um pequeno problema de lógica na hora de preencher o array vetor.

Você precisa se lembrar que o tamanho de vetor.length é diferente de frase.length()

Quando faz um for para preencher o vetor, haverá casos em que tem que pular o caracter em frase…
Mas em vetor precisa manter a mesma posição…

Talvez seja mais simples utilizar um while, ao invés de for, e dois indices: um para vetor e outro para frase.

Assim quando contiver um espaço em frase, você incrementa o indice de frase e mantém o de vetor igual.

[quote=AbelBueno]Apesar das soluções acima funcionarem, acredito se tratar de trabalho de faculdade, portanto o uso dessas funções deve ser restrito.

O jeito mais simples sem limitação seria:

char[] vetor = frase.replace(" ", "").toCharArray()

No seu caso, há um pequeno problema de lógica na hora de preencher o array vetor.

Você precisa se lembrar que o tamanho de vetor.length é diferente de frase.length()

Quando faz um for para preencher o vetor, haverá casos em que tem que pular o caracter em frase…
Mas em vetor precisa manter a mesma posição…

Talvez seja mais simples utilizar um while, ao invés de for, e dois indices: um para vetor e outro para frase.

Assim quando contiver um espaço em frase, você incrementa o indice de frase e mantém o de vetor igual.

[/quote]

Boa tarde AbelBueno,

Eu discordo da sua citação já que o tamanho do vetor vai ter o mesmo tamanho da frase sem os espaços em brancos, ou seja, o que não vai gerar nenhum erro, dessa forma pular caracteres não é necessário.

Então pessol, obrigado pela atenção

O professor passou uma atividad:
Verificar se uma frase é um palindromo ou nao.

Exemplo de palindromo:
A cara rajada da jararaca

Se voce ler a frase da direita para esquerda, verá que ela tem o mesmo significado…

Eu fiz da seguinte forma:

[code]import java.util.*;

public class Exerc_01 {

public static void main(String[] args) {

	Scanner leia = new Scanner(System.in);

	String frase;
	System.out.println("Escreva a frase:");
	frase = leia.nextLine();

	String minus = frase.toLowerCase();

	String result = minus.replaceAll(" ", "");

	int j = result.length() - 1;

	boolean palindromo = true;

	for (int i = 0; i < result.length() && palindromo; i++) {

		char a = result.charAt(i);
		char b = result.charAt(j);

			if (a != b) {
				palindromo = false;
			}
		
		j--;
	}
	if (palindromo) {
		System.out.println("Palindromo");
	} else {
		System.out.println("Não é Palindromo");
	}

}

}
[/code]

O problema é que eu nao posso usar o replace all.

Por isso quero por dentro do vetor apenas as letras e nao os espaços…

[quote=RodrigoM91]
Boa tarde AbelBueno,

Eu discordo da sua citação já que o tamanho do vetor vai ter o mesmo tamanho da frase sem os espaços em brancos, ou seja, o que não vai gerar nenhum erro, dessa forma pular caracteres não é necessário.[/quote]

Boa tarde RodrigoM91
Eu me referia a solução inicial proposta pelo diego.ldn e não ao seu código.

No código dele não é criado uma segunda string sem os espaços em branco.

Portanto, o tamanho do vetor (que é criado descontando os espaços em branco) fica diferente do tamanho da string frase.

Com isso não é possível utilizar apenas uma variável para percorrer os dois.

diego.ldn,

Porque você não pode utilizar o replace ?

Falo !

[quote=AbelBueno][quote=RodrigoM91]
Boa tarde AbelBueno,

Eu discordo da sua citação já que o tamanho do vetor vai ter o mesmo tamanho da frase sem os espaços em brancos, ou seja, o que não vai gerar nenhum erro, dessa forma pular caracteres não é necessário.[/quote]

Boa tarde RodrigoM91
Eu me referia a solução inicial proposta pelo diego.ldn e não ao seu código.

No código dele não é criado uma segunda string sem os espaços em branco.

Portanto, o tamanho do vetor (que é criado descontando os espaços em branco) fica diferente do tamanho da string frase.

Com isso não é possível utilizar apenas uma variável para percorrer os dois.[/quote]

Boa tarde AbelBueno,

Perdão então cara pensei que você estava falando do exemplo que eu dei…

Realmente então eu concordo com a sua citação … :smiley:

Falo!

Ainda continua não dando certo =(

[code]import java.util.*;

public class Exerc_01 {

public static void main(String[] args) {

	Scanner leia = new Scanner(System.in);

	String frase;
	System.out.println("Escreva uma frase:");
	frase = leia.nextLine();

	int count = 0;

	for (int i = 0; i < frase.length(); i++) {
		char nospace = frase.charAt(i);
		if (nospace == ' ') {
			count++;
		}
	}

	char vetor[] = new char[frase.length() - count];

	int j = 0;
	for (int i = 0; i < vetor.length; i++) {

		char nospace = frase.charAt(i);
		if (nospace != ' ') {
			vetor[j] = nospace;
			j++;
		}
	}

	for (int i = 0; i < vetor.length; i++) {
		System.out.print(vetor[i]);
	}

}

}
[/code]

vlw galera

já resolvi o problema