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

8 respostas
novaes555

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:

8 Respostas

novaes555

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

CharlesAlves

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

primeiro resultado, no proprio GUJ inclusive

vê se resolve ai

fabiocortolan

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(" ")) { // 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.

novaes555

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.

Rodrigo_Sasaki
Já pensou em fazer algo assim?
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);
		
	}
Não sei se fica mais rápido, mas se a memória aguentar você passa o texto do arquivo todo aí
novaes555
Rodrigo Sasaki:
Já pensou em fazer algo assim?
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);
		
	}
Não sei se fica mais rápido, mas se a memória aguentar você passa o texto do arquivo todo aí

Ainda não. Farei e postarei a resposta. Mto obrigado.

novaes555

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

Rodrigo_Sasaki

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

Criado 15 de abril de 2013
Ultima resposta 16 de abr. de 2013
Respostas 8
Participantes 4