Labels

Showing posts with label string. Show all posts
Showing posts with label string. Show all posts

Tuesday, February 28, 2012

Concatenar String: String vs StringBuilder

Quando for concatenar Strings é melhor utilizar a Classe String ou StringBuilder?
Para responder essa pergunta fiz um teste simples utilizando as duas classe, segue o código:
package com.blogspot.rozolin.utils;

import java.util.Date;

public class StringUtils {

 public static void main(String[] args) {
  for (int i = 0; i < 10; i++) {
   testaStringBuilder();
   testaString();
  }

 }

 private static void testaString() {
  long tempo = new Date().getTime();

  String string = "";

  for (int i = 0; i < 10000; i++) {
   // Concatena 10000 vezes utilizando a classe String
   string = string.concat(""+i);
  }

  long milissegundo = new Date().getTime() - tempo;

  System.out.println("String demorou: " + milissegundo + " Milissegundo");
 }

 private static void testaStringBuilder() {
  long tempo = new Date().getTime();

  StringBuilder stringBuilder = new StringBuilder("");

  for (int i = 0; i < 10000; i++) {
   // Concatena 10000 vezes utilizando a classe StringBuilder
   stringBuilder.append(i);
  }

  long milissegundo = new Date().getTime() - tempo;

  System.out.println("StringBuilder demorou: " + milissegundo
    + " Milissegundo");
 }
}

Resultado:
StringBuilder demorou: 1 Milissegundo
String demorou: 116 Milissegundo
StringBuilder demorou: 1 Milissegundo
String demorou: 108 Milissegundo
StringBuilder demorou: 1 Milissegundo
String demorou: 105 Milissegundo
StringBuilder demorou: 0 Milissegundo
String demorou: 105 Milissegundo
StringBuilder demorou: 0 Milissegundo
String demorou: 105 Milissegundo
StringBuilder demorou: 1 Milissegundo
String demorou: 109 Milissegundo
StringBuilder demorou: 1 Milissegundo
String demorou: 104 Milissegundo
StringBuilder demorou: 1 Milissegundo
String demorou: 105 Milissegundo
StringBuilder demorou: 1 Milissegundo
String demorou: 104 Milissegundo
StringBuilder demorou: 1 Milissegundo
String demorou: 105 Milissegundo

A diferença é muito grande StringBuilder com certeza é muito mais rápido.

Extrair E-mails de String

Esses dias estava querendo extrair os e-mails de um determinado texto, e então dei uma pesquisada na internet e achei alguns exemplos:
http://javafree.uol.com.br/topic-861154-Extraindo-email-com-Expressao-Regular.html
http://www.guj.com.br/java/214784-extrair-email--arquivo-texto--expressao-regular

E a partir desta pesquisa criei um método para extrair e-mails:


package com.blogspot.rozolin.utils;

import java.util.Set;
import java.util.TreeSet;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class EmailUtils {

 private static final Pattern EMAIL_PATTERN = Pattern.compile("[_a-z0-9-]+(\\.[_a-z0-9-]+)*@[a-z0-9-]+(\\.[a-z0-9-]+)*(\\.[a-z]{2,3})");

 public static Set<String> getEmails(String texto) {
  Set<String> emails = new TreeSet<String>();
  Matcher mat = EMAIL_PATTERN.matcher(texto);
  while (mat.find()) {
   emails.add(mat.group());
  }
  return emails;

 }

 public static void main(String[] args) {
  String texto = " gustavorozolin@gmail.com <algum texto aqui> teste@teste.com <outro aqui> teste1@teste.com.br ";

  Set<String> emails = EmailUtils.getEmails(texto);

  for (String email : emails) {
   System.out.println(email);
  }
 }

}
Resultado:
gustavorozolin@gmail.com
teste1@teste.com.br
teste@teste.com