Contar os caracteres de uma string

10 respostas
Arrk

Ae galera, blz?
Começei a estudar java faz uns dois dias e estou com um problema. Como faço pra contar os caracteres de uma String? Tipo, eu tenho uma frase e quero contar a quantidade de consoantes, letras e vogais. Como fazer?

Obrigado pela atenção.

Abraços.

10 Respostas

CrOnNoS

Well … você pode usar o método da classe String charAt(index) para acessar cada charactere da sua String.
Poderia fazer isso dentro de um for e comparar cada caractere com as vogais ou o caractere de espaço. Se fosse uma vogal você incrementaria o “numeroLetras” e “numeroVogais”, se fosse um espaço (caso seja uma frase e não palavra) não faria nada e se for qualquer outra coisa (considerando que a palavra realmente vai ter só vogais e consoantes) incrementaria o “numeroLetras” e “numeroConsoantes”.

Tiburcio_Mancha

contar os caracteres de uma string vc faz assim:

String nome = "testando";

System.out.println(nome.length());

o método length da classe String retorna quantos caracteres a String possui.

agoras, contar vogal, número, consoante, se tiver falando merda alguém pode me corrigir, mas acho que vc teria que usar regex e pra alguém está a dois dias estudando Java, não aconselho a vc ver isso ainda...melhor se concentrar em exercícios mais básicos..

Vc é iniciante na linguagem ou mesmo em programação?

Arrk

Putz, valeu galera. Com esse método que o CrOnNoS falou e com a função length que eu já supunha que teria dá pra fazer =P

Tiburcio_Mancha:
contar os caracteres de uma string vc faz assim:
String nome = "testando";

System.out.println(nome.length());

o método length da classe String retorna quantos caracteres a String possui.

agoras, contar vogal, número, consoante, se tiver falando merda alguém pode me corrigir, mas acho que vc teria que usar regex e pra alguém está a dois dias estudando Java, não aconselho a vc ver isso ainda...melhor se concentrar em exercícios mais básicos..

Vc é iniciante na linguagem ou mesmo em programação?

Sou programador C++ há um tempão já, hehehe. Na verdade programar em java não foi uma escolha, prefiro C++ =P
Mas como eu ouvi falar muito bem de Java começei a aprender e também tem a facul, que na disciplina de POO dão Java.

Vou testar aqui, depois posto o código se tiver dado errado.

EDIT{
Ah, só mais um detalhe, tem alguma método predicado da classe String que verifique se um caractere é letra, se é dígito, etc?

O código por enquanto tá assim:
class InfoString{
	public boolean isLetter(char ch){
		if((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z'))
			return true;
		else
			return false;
	}
	public boolean isSpace(char ch){
		if(ch == ' ')
			return true;
		else
			return false;
	}
	public static void main(String[] args){
		InfoString strInfo = new InfoString();
		
		String text = "To be or not to be. That is the question"
		+ " Whether it's noble in the mind to suffer"
		+ " slings and arrows of outrangeous fortune."
		+ " or to take arms against a sea of troubles,"
		+ " and by opposing end them?";
		
		int spaces = 0,
			others = 0,
			letters = 0;
		
		for(int i = 0; i < text.length(); i++){
			if(strInfo.isLetter(text.charAt(i)))
				letters++;
			else if(strInfo.isSpace(text.charAt(i)))
				spaces++;
			else
				others++;
		}
		
		System.out.println("Letters: " + letters + ", Spaces: " + spaces + ", Others: " + others);
	}
}

Tava pensando em fazer outro método predicado que ia verificar se o caractere é uma vogal, mas aí tem as vogais em maiúsculo e minúsculo. A biblioteca do Java já tem alguma função pra converter chars de maiuscula pra minúscula ou o contrário?
}

Valeu! \o

CrOnNoS
Não sei de um método que faça o que você quer mas fiz aqui algo que deve te ajudar:
public static void main(String[] args) {

		char a = 'a';
		char z = 'z';
		char A = 'A';
		char Z = 'Z';
		char um = '1';
		char nove = '9';

		System.out.printf("a = %d\nz = %d\nA = %d\nZ = %d\n1 = %d\n9 = %d\n",
				(int) a, (int) z, (int) A, (int) Z, (int) um, (int) nove);

	} // main

Como você pode ver se executar esse programa, você pode pegar o valor inteiro de um char (que vai retornar seu valor Unicode) para comparar cada char (a estrutura para a conversão está no código).

Para dexar uma String inteira maiúscula ou minúscula, você pode usar o método toUpperCase e toLowerCase da String. Para chars basta usar o método stático de mesmo nome da classe Character:
public static void main(String[] args) {

		char a = 'a';
		String palavra = "PalAVRa";

		System.out.println(palavra.toLowerCase());

		System.out.println(Character.toUpperCase(a));

	} // main
Arrk
CrOnNoS:
Não sei de um método que faça o que você quer mas fiz aqui algo que deve te ajudar:
public static void main(String[] args) {

		char a = 'a';
		char z = 'z';
		char A = 'A';
		char Z = 'Z';
		char um = '1';
		char nove = '9';

		System.out.printf("a = %d\nz = %d\nA = %d\nZ = %d\n1 = %d\n9 = %d\n",
				(int) a, (int) z, (int) A, (int) Z, (int) um, (int) nove);

	} // main
Beleza! Tinha feito tres métodos pra checar o tipo de caractere, agora com os métodos estáticos da Character fica muito mais simples xD Aqui como ficou o código:
class StringInfo{  
	public boolean isVowel(char ch){  
		ch = Character.toLowerCase(ch);
		if(ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u')  
			return true;  
		else  
			return false;  
	}  
	public static void main(String[] args){  
		StringInfo strInfo = new StringInfo();  

		String text = "To be or not to be. That is the question"  
			+ " Whether it's noble in the mind to suffer"  
			+ " slings and arrows of outrangeous fortune."  
			+ " or to take arms against a sea of troubles,"  
			+ " and by opposing end them?";  

		int spaces = 0,  
		others = 0,  
		vowels = 0,
		letters = 0;

		for(int i = 0; i < text.length(); i++){ 
			if(strInfo.isVowel(text.charAt(i)))  
				vowels++;  
			if(Character.isLetter(text.charAt(i)))
				letters++;
			else if(text.charAt(i) == ' ')  
				spaces++;  
			else  
				others++;  
		}  

		System.out.println("Total: " + text.length() + 
                ", Letters: " + letters + 
                ", Consonants: " + (letters - vowels) + 
                ", Vowels: " + vowels + 
                ", Spaces: " + spaces + 
                ", Others: " + others);  
	}  
}
E funcionou beleza. Valeu mesmo galera. Tenho só mais uma última dúvida =P Vi aí que você usou o método printf pra formatar a saída me lembrou do C e de uma coisa que não consigo fazer e que acho super chato. Como eu faço pra formatar um double? Tipo, porque sempre que saí aqui, saí em notação científica: 123123E11. Como eu faço pra mostrar um double formatado, tipo: 1.23 ? EDIT{ Eu fiz aqui com um NumberFormat, tem como fazer de outro modo mais simples?
final int terraDiametro = 7600, solDiametro = 865000;
		
NumberFormat f = NumberFormat.getNumberInstance();

System.out.println("O volume da terra é: " + f.format((4 * Math.PI * Math.pow(terraDiametro / 2, 3))) + " milhas cúbicas.");
} EDIT2{ Tentei algo como isso:
System.out.printf("O número é: %2.2f\n", 2.321);
Mas não funcionou =/ } EDIT3{ Agora tá estranho, tentei todos os exemplos dessa página e nenhum funcionou: http://www.java2s.com/Tutorial/Java/0120__Development/SpecifyingtheWidthandPrecision.htm O que acontece é que quando coloco por exemplo:
System.out.printf("x = %3.2f y = %3.2g\n", x, y);
A saída é: x = y = e só. =/ O que há de errado? }

Obrigado pela ajuda.

Abraços.

CrOnNoS

A formatação para casa decimais após a vírgula é “.casas” do jeito que você fez, exemplo:

System.out.printf("O número é: %.2f\n", 2.321);

Sim, quase exatamente o seu.
Resultado: 2,32
Não era isso que você queria ?

E sobre o outro valor que você colocou, ele define um valor mínimo de casas (colunas) que vão ser usadas para exibir aquele valor. Por exemplo:

System.out.printf("O número é: %.2f\n", 2.321); System.out.printf("O número é: %10.2f\n", 2.321);

Imprimem:

O número é: 2,32 O número é: 2,32

Sendo que do jeito que está, ele sempre alinha o valor a ser imprimido a direita. Se quiser alinhar a esquerda coloque um “-” antes do número de casas:

System.out.printf("O número é: %10.2fOlá!\n", 2.321321); System.out.printf("O número é: %-10.2fOlá!\n", 2.321432);

Arrk

Cara, parece mentira, mas aqui não saí o número. O.o !
Você tem idéia do que possa ser?
Estou usando o Eclipse 3.2 no Ubuntu Jaunty 9.04 e aqui as especificações da JDK:

java version “1.6.0_0”
OpenJDK Runtime Environment (IcedTea6 1.4.1) (6b14-1.4.1-0ubuntu11)
OpenJDK Server VM (build 14.0-b08, mixed mode)

Obrigado pela atenção.

Abraço.

DavidUser
public class ContagemDeString {
    public static void main (String[] args) {
        String str = "O rato roeu a ropa do rei de roma";
        
        String frs = str;
        int vog = 0, cons = 0;
        str= str.toLowerCase();
        for(int i = 0; i < str.length(); i++){
            char c = str.charAt(i);
            if(c == 32) continue;
            if(c == 97 | c == 101 | c == 105 | c == 111 | c == 117){
                vog++;
                continue;
            }
            if(c >= 98 && c <= 122) cons++;
        }

        System.out.println("Na frase \""+frs+"\" temos:\nVogais: "+vog+"\nConsoantes: "+cons);

    }

}
Arrk

DavidUser, desculpa, mas o problema da contagem de caracteres de string eu já tinha feito nos primeiros posts. O que eu não tô conseguindo fazer é saída formatada de números em ponto flutuante.

DavidUser

Tente atualizar para:
java version “1.6.0_15”

Criado 16 de agosto de 2009
Ultima resposta 17 de ago. de 2009
Respostas 10
Participantes 4