Contar os caracteres de uma string

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.

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”.

1 curtida

contar os caracteres de uma string vc faz assim:

[code]

String nome = “testando”;

System.out.println(nome.length());[/code]

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?

2 curtidas

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

[quote=Tiburcio_Mancha]contar os caracteres de uma string vc faz assim:

[code]

String nome = “testando”;

System.out.println(nome.length());[/code]

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?
[/quote]

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

Não sei de um método que faça o que você quer mas fiz aqui algo que deve te ajudar:

[code]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[/code]

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:

[code]public static void main(String[] args) {

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

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

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

} // main[/code]

[quote=CrOnNoS]Não sei de um método que faça o que você quer mas fiz aqui algo que deve te ajudar:

[code]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

[/code]
[/quote]

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.

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);

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.

[code]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);

}

}[/code]

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.

Tente atualizar para:
java version “1.6.0_15”