Boa tarde a todos.
tenho um código que conta o total de espaços em branco na uma string, na minha verificação só posso ter um espaço em branco no tamanho da string = 1 se tiver mais espaços em branco e essa quantidade for igual ao tamanho da minha string apresento um erro. está funcionando, roda perfeitamente com poucos caracteres. o o problema que tenho q fazer verificações em campos, documentos. Cada documento tem aproximadamente 32mil linhas, no mínimo. verifico a cada 5 arquivos, salvo no banco, de 10 em 10 minutos, mas o que esta acontecendo é que qdo esta iniciando a verificação do ultimo, o serviço entra em um novo processo. verificando mais 10 novos arquivos.
qro ajuda referente a este código. como contar espaços em branco com uma performance melhor… Segue o código abaixo:
//contar espaços
texto = " ";
int total=0;
for(int i=0; i < texto.length(); i++){
char ch = texto.charAt(i);
String x1 = String.valueOf(ch);
if(x1.equalsIgnoreCase(" ")){
total=total+1;
}
}
if(texto.length() == total && total == 1){
//verdadeiro
}
if(texto.length() == total && total > 1){
//falso
}
Para começar, vc poderia alterar as linhas abaixo:
int total=0;
for(int i=0; i < texto.length(); i++) {
char ch = texto.charAt(i);
// String x1 = String.valueOf(ch); // remover essa linha
// if (x1.equalsIgnoreCase(" ")) { // alterar essa linha para esta:
if (ch == ' ') {
total++; // aki tbm pode ser alterado de "total = total + 1" para "total++" ou "total += 1"
}
}
Não testei mas acredito q funcione e nesse caso vc economiza algumas String’s na sua memória.
Só uma obs, sempre poste o código entre as tags ‘CODE’, fica mais legível.
Já pensou em fazer algo assim? [code] public static void main(String[] args){
String texto = " Nessa String existem 20 \n espaços em branco “;
Pattern p = Pattern.compile(” +");
Matcher m = p.matcher(texto);
int count = 0;
while(m.find()){
count += m.group().length();
}
System.out.println(count);
}[/code]Não sei se fica mais rápido, mas se a memória aguentar você passa o texto do arquivo todo aí
[quote=Rodrigo Sasaki]Já pensou em fazer algo assim? [code] public static void main(String[] args){
String texto = " Nessa String existem 20 \n espaços em branco “;
Pattern p = Pattern.compile(” +");
Matcher m = p.matcher(texto);
int count = 0;
while(m.find()){
count += m.group().length();
}
System.out.println(count);
}[/code]Não sei se fica mais rápido, mas se a memória aguentar você passa o texto do arquivo todo aí[/quote]
Ainda não. Farei e postarei a resposta. Mto obrigado.
String texto = " Nessa String existem 20 \n espaços em branco ";
int count = 0;
long tempoInicial = System.currentTimeMillis();
long tempoFinal = 0;
for(int i = 0; i < 100000; i++){
int count = texto.length() - texto.replace(" ","").length();
tempoFinal = System.currentTimeMillis();
System.out.println(count);
}
System.out.println("Tempo em millis: " + (tempoFinal - tempoInicial) );
Tempo em millis: 2964
Tempo em millis: 2409
Tempo em millis: 2855
teste com o código do Rodrigo Sasaki
String texto = " Nessa String existem 20 \n espaços em branco ";
Pattern p = Pattern.compile(" +");
Matcher m = p.matcher(texto);
int count = 0;
long tempoInicial = System.currentTimeMillis();
long tempoFinal = 0;
for(int i = 0; i < 100000; i++){
while(m.find()){
count += m.group().length();
}
tempoFinal = System.currentTimeMillis();
System.out.println(count);
}
System.out.println("Tempo em millis: " + (tempoFinal - tempoInicial) );
Tempo em millis: 1368
Tempo em millis: 1114
Tempo em millis: 1147