Fala pessoal! Sou novato em Java e preciso muito da ajuda de vcs… Me deparei com um exercício onde n sei o que pode estar acontecendo, pois o eclipse não critica o código, porém ele n executa…
Trata-se de um programa onde eu preciso apresentar a quantidade de vezes que a letra “a” aparece em uma frase.
Segue abaixo o meu código:
[code]package br.com.java.capitulo02;
public class Contando {
public static void main(String[] args) {
String x = "Os nomes das classes em Java precisam começar com letra e depois desta quaisquer combinações de letras e dígitos.";
int total=0;
for(int i=0; i<=x.length();i++){
char ch = x.charAt(i);
String x1 = String.valueOf(ch);
if(x1.equalsIgnoreCase("a")){
total=total+1;
}
}
System.out.println(total);
}
String x = "Os nomes das classes em Java precisam começar com letra e depois desta quaisquer combinações de letras e dígitos.";
int total=0;
for(int i=0; i<x.length();i++){
char ch = x.charAt(i);
String x1 = String.valueOf(ch);
if(x1.equalsIgnoreCase("a")){
total=total+1;
}
}
System.out.println(total);
}
tava dando java.lang.StringIndexOutOfBoundsException, vc tava acessando um valor a mais na String.
como o for (i) ta indo de zero ele tem q parar no numero anterior do length.
public static void main(String[] args) {
String x = "Os nomes das classes em Java precisam começar com letra e depois desta quaisquer combinações de letras e dígitos.";
int total=0;
for (int i=0;i<=x.length()-1;i++) {
if (x.substring(i,i+1).equalsIgnoreCase("a"))
total=total+1;
}
System.out.println(total);
}
Você pode tbm utilizar expressão regular e o metodo replace
[code]public static void main(String[] args) {
String x = “Os nomes das classes em Java precisam começar com letra e depois desta quaisquer combinações de letras e dígitos.”;
int total = x.replaceAll("[^a]", "").length();
System.out.println(total);
[quote=Astork]Você pode tbm utilizar expressão regular e o metodo replace
[code]public static void main(String[] args) {
String x = “Os nomes das classes em Java precisam começar com letra e depois desta quaisquer combinações de letras e dígitos.”;
int total = x.replaceAll("[^a]", "").length();
System.out.println(total);
}[/code]
[/quote]
e assim sem for e sem expressão regular, e em uma linha hehehehe
String a = "Os nomes das classes em Java precisam começar com letra e depois desta quaisquer combinações de letras e dígitos.";
System.out.println(a.split("a").length-1);
[quote] Focão
e assim sem for e sem expressão regular, e em uma linha hehehehe
String a = "Os nomes das classes em Java precisam começar com letra e depois desta quaisquer combinações de letras e dígitos.";
System.out.println(a.split("a").length-1); [/quote]
Tanto o método split como o replaceAll utilizam expressões regulares… !!!
E referente a fazer uma unica linha, foi feito em duas pois inicialmente no código apresentado, tinha a variavel total… !!!
O metodo split joga o resultado para uma array… o que não sei se neste caso seria uma solução melhor.
public static void main(String[] args) {
String a = "Os nomes das classes em Java precisam começar com letra e depois desta quaisquer combinações de letras e dígitos.";
long start1 = System.currentTimeMillis();
int total1 = a.split("a").length-1;
long delay1 = System.currentTimeMillis() - start1;
System.out.println("Split Demorou " + delay1 + " milissegundos");
long start2 = System.currentTimeMillis();
int total2 = a.replaceAll("[^a]", "").length();
long delay2 = System.currentTimeMillis() - start2;
System.out.println("ReplaceAll Demorou " + delay2 + " milissegundos");
}
Para cronometrar uma operação que você sabe ser muito rápida,
a) Repita-a uma quantidade de vezes razoável, meça o tempo, e divida pela quantidade de vezes.
b) Use System.nanoTime (não se esqueça que, embora esse método tenha uma precisão de 1 nanossegundo, ou um bilionésimo de segundo, na prática ele tem uma exatidão bem menor, e dependente tanto do sistema operacional usado quanto do hardware. Acho que no Windows a exatidão é de cerca de 0.1 ms para System.nanoTime, mas não tenho certeza. (Ele usa QueryPerformanceCounter, se não me engano).
Portanto, você tem de combinar os métodos a) e b).
Além disso, o tempo de execução é diferente se o Java está só interpretando os bytecodes, ou se está usando os bytecodes já compilados para as instruções da máquina. Para forçar o Java a compilar seu código para código nativo, é necessário isolar a operação repetitiva em um método e executar esse método repetidamente uma determinada quantidade de vezes (talvez umas 1000 vezes, dependendo da configuração da sua JVM).
boas pessoal, estive a ver as formas dadas para ver a ocorrencia da letra “a” na frase, mas nao consegui adapta las para o meu caso, sera que alguem me poderia ajudar?
eu tenho 2 strings e quero contar quantos caracteres iguais têm as 2…