[RESPONDIDO] Ajuda na procura de carectere. Espaço em branco

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
}

Desde já agradeço a todos. :smiley: :smiley:

PS. o forum não deixou colocar texto = " " com mais de 1 espaço.

Colocando no google “remover espaços em branco string java”

primeiro resultado, no proprio GUJ inclusive

vê se resolve ai

Para começar, vc poderia alterar as linhas abaixo:

int total=0;

for(int i=0; i &lt; texto.length(); i++) {
  char ch = texto.charAt(i);
//  String x1 = String.valueOf(ch); // remover essa linha
  
//  if (x1.equalsIgnoreCase(&quot; &quot;)) { // alterar essa linha para esta:
  if (ch == ' ') {
    total++; // aki tbm pode ser alterado de &quot;total = total + 1&quot; para &quot;total++&quot; ou &quot;total += 1&quot;
  }
}

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.

Comprimento a todos com a Paz de Cristo.
Agradeço as respostas, mas todos estes também deixaram o sistema lento. a diferença foi mínima.

a solução que melhorou a performance foi esta:

int quantidadeDeEspaços = texto.length() - texto.replace(" ","").length(); if(texto.length() == quantidadeDeEspaços && quantidadeDeEspaços == 1){ //true }else if(texto.length() > quantidadeDeEspaços){ //true } //false;
Abraço.

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.

Teste com meu código

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

Mto obrigado. Rodou 3x mais rápido

Opa, bom saber :slight_smile: Eu mesmo fiquei na dúvida