EVGD: Códigos Toscos

[quote=peczenyj]Beleza, eu executei e tive esses resultados:
T1: 740
T2: 479
T3: 27191[/quote]

Esse foi o teu T3 mesmo???

Foi o T3 original, usando [A-Z0-9]+

    private boolean validarCaracteresNumeroLogico5(String numero) {
        for (int i = 0; i < numero.length(); i++) {
            char c = numero.charAt(i);
            if ((c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9')) continue;
            return false;
        }
        return true;
    }

Quanto é que dá o benchmarking disso? É mais rápido que regex ou não?

Tem certeza, peczenyj???

[code]package teste;

import java.util.regex.Pattern;

public class Teste {

public static void main(String[] args) {

    Teste t = new Teste();
    String num = "";
    final int size = 1000;

    long t0 = System.currentTimeMillis();

    for (int i = 0; i < size; i++) {
        num += i;
        t.validarCaracteresNumeroLogico(num);
    }

    long t1 = System.currentTimeMillis();

    num = "";
    for (int i = 0; i < size; i++) {
        num += i;
        t.validarCaracteresNumeroLogico2(num);
    }

    long t2 = System.currentTimeMillis();

    num = "";
    for (int i = 0; i < size; i++) {
        num += i;
        t.validarCaracteresNumeroLogico3(num);
    }

    long t3 = System.currentTimeMillis();

    num = "";
    for (int i = 0; i < size; i++) {
        num += i;
        t.validarCaracteresNumeroLogico4(num);
    }

    long t4 = System.currentTimeMillis();

    num = "";
    for (int i = 0; i < size; i++) {
        num += i;
        t.validarCaracteresNumeroLogico5(num);
    }

    long t5 = System.currentTimeMillis();

    num = "";
    for (int i = 0; i < size; i++) {
        num += i;
        t.validarCaracteresNumeroLogico6(num);
    }

    long t6 = System.currentTimeMillis();

    num = "";
    for (int i = 0; i < size; i++) {
        num += i;
        t.validarCaracteresNumeroLogico7(num);
    }

    long t7 = System.currentTimeMillis();

    num = "";
    for (int i = 0; i < size; i++) {
        num += i;
        t.validarCaracteresNumeroLogico8(num);
    }

    long t8 = System.currentTimeMillis();
            
    System.out.println("T1: " + (t1 - t0));
    System.out.println("T2: " + (t2 - t1));
    System.out.println("T3: " + (t3 - t2));
    System.out.println("T4: " + (t4 - t3));
    System.out.println("T5: " + (t5 - t4));
    System.out.println("T6: " + (t6 - t5));
    System.out.println("T7: " + (t7 - t6));
    System.out.println("T8: " + (t8 - t7));

}

private boolean validarCaracteresNumeroLogico(String numero) {
    String charValidos = "ABCDEFGHIJKLMNOPQRSTUVXZWY0123456789";
    for (int i = 0; i<numero.length();i++ ) {
        if (charValidos.indexOf(numero.substring(i, i + 1)) >< 0) {
            return false;
        }
    }
    return true;
}

private boolean validarCaracteresNumeroLogico2(String numero) {
    String charValidos = "ABCDEFGHIJKLMNOPQRSTUVXZWY0123456789";
    for (int i = 0; i < numero.length(); i++) {
        if (charValidos.indexOf(numero.charAt(i)) < 0) {
            return false;
        }
    }
    return true;
}

private boolean validarCaracteresNumeroLogico3(String numero) {
    return numero.matches("[A-Z0-9]+");
}

private boolean validarCaracteresNumeroLogico4(String numero) {
    return charValidosPattern2.matcher(numero).matches();
}

private boolean validarCaracteresNumeroLogico5(String numero) {
    return numero.matches("\w+");
}

private boolean validarCaracteresNumeroLogico6(String numero) {
    return Pattern.compile("^\w+$", Pattern.CASE_INSENSITIVE).matcher(numero).matches();
}

private boolean validarCaracteresNumeroLogico7(String numero) {
    return charValidosPattern.matcher(numero).matches();
}

private boolean validarCaracteresNumeroLogico8(String numero) {
    for (int i = 0; i < numero.length(); i++) {
        char c = numero.charAt(i);
        if ((c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9')) {
            continue;
        }
        return false;
    }
    return true;
}

private static Pattern charValidosPattern =  Pattern.compile("^\w+$",Pattern.CASE_INSENSITIVE);
private static Pattern charValidosPattern2 =  Pattern.compile("[A-Z0-9]+",Pattern.CASE_INSENSITIVE);

}[/code]

Novos resultados!!!

Windows XP - JDK 1.5.0_06

JDeveloper 10g:

[quote]T1: 281
T2: 172
T3: 156
T4: 188
T5: 78
T6: 78
T7: 62
T8: 16[/quote]

Eclipse:

[quote]T1: 297
T2: 172
T3: 156
T4: 172
T5: 78
T6: 79
T7: 62
T8: 16[/quote]

A solução do victorwss parace ser a mais rápida.

Rodei aqui na minha maquina: Windows XP SP2 jdk: java version “1.6.0_03”
Eclipse Europa:
T1: 219
T2: 156
T3: 125
T4: 109
T5: 94
T6: 63
T7: 93
T8: 0

quantas dessas funcionam se a palavra tiver um ‘Ç’ ?

public class ClasseQualquer extends JFrame {

    ...

    // OLHA A GAMBIARRA:
    private class SetaFocoAForca extends Thread {
        private Component alvo;
        public SetaFocoAForca(Component alvo) {
            super();
            this.alvo = alvo;
            if (alvo != null) this.start();
        }

        public void run() {
            while (!ClasseQualquer.this.isVisible()) {
                try {
                    Thread.sleep(20);
                } catch (InterruptedException e) {
                    // Ignora.
                }
            }
            alvo.requestFocusInWindow();
        }
    }

    ...

}

Essa eu confesso. Eu sou o autor! Fui eu que fiz! Quando surge um problema dracônico e nada funciona, nada como uma gambiarrinha para fazer dar certo na marra, hehehe.

POG na veia.

Quanto à execução dos métodos acima comentados, na minha máquina os tempos ficam variando entre:

T1: 31
T2: 141
T3: 140
T4: 110
T5: 62
T6: 78
T7: 63
T8: 31


T1: 31
T2: 141
T3: 125
T4: 94
T5: 78
T6: 62
T7: 78
T8: 16

Agora…

T1: 16
T2: 156
T3: 110
T4: 109
T5: 78
T6: 63
T7: 62
T8: 16


T1: 16
T2: 156
T3: 109
T4: 110
T5: 78
T6: 62
T7: 63
T8: 31

O certo seria fazer uma análise matemática dos algoritmos, não?

Tá, mas qual o seu ambiente? (SO, JRE, IDE, RAM)…

T1: 16
T2: 141
T3: 109
T4: 94
T5: 62
T6: 63
T7: 62
T8: 16

=>
Pentium 4HT, 2GB RAM, WIndows XP Professional, JDK 1.6_06, Eclipse Europa

[quote=Rafael Nunes]T1: 16
…[/quote]

??? Qual é o seu T1? Não é o original?

(ops, postei errado)

List<Object> params = new ArrayList<Object>();

[quote=peerless]Acabou de aprender Generics:

List<Object> params = new ArrayList<Object>();

[/quote]

KKK!!!

[quote=peerless]Acabou de aprender Generics:

List<Object> params = new ArrayList<Object>();

[/quote]

vai ver ele colocou isso pra parar de dar warning por generics hehe

[quote=peerless]Acabou de aprender Generics:

List<Object> params = new ArrayList<Object>();

[/quote]

Às vezes isso ocorre em código legado que está sendo migrado para java 5 ou superior.

[quote=victorwss][quote=peerless]Acabou de aprender Generics:

List<Object> params = new ArrayList<Object>();

[/quote]

Às vezes isso ocorre em código legado que está sendo migrado para java 5 ou superior.[/quote]

Pq?

Olha uma amostra do que estou tendo que dar manutenção !!! =[

if ( d == 0 ){ obterResgistros( 0 ); }else{ obterRegistros( d ); }
Que raciocínio lógico perfeito esse hein !!!

if (u.getCodigo() == 14 ){ this.jbExcluir.setEnabled( true ); }else{ this.jbExcluir.setEnabled( false ); }

E agora a mudança:

obterResgistros( d ); this.jbExcluir.setEnabled( u.getCodigo() == 14 ); // 14 - Permissão

E ainda tem muito mais =[

Fui !