Diferencias entre algo sencillo y algo enrevesado

Viernes, 8 Enero 2010

Hoy me he puesto a intentar hacer una cutre aplicación para Android (que está tan de moda) y de paso a programar mis primeras líneas en JAVA. ¿Quén inventó ese lenguaje del diablo? Se merece las 7 plagas seguidas de una lapidación pública, y voy a ello con un ejemplo muy simple.

Vamos a intentar partir una cadena de texto por espacios, en Python:

>>> a="esto   es una cadena   de texto"
>>> a.split()
['esto', 'es', 'una', 'cadena', 'de', 'texto']

Nótese que entre alguna de las palabras hay más de un espacio.

Ahora vamos a hacerlo en JAVA:

public class test {
public static void main(String args[]) {
String a;
String [] aArray;
int i;
a="esto   es una cadena   de texto";
aArray=a.split(" ");
for (i=0; i<aArray.length; i++) {
System.out.println("index=" + i + " aArray=" + aArray[i]);
}
}
}

Que como resultado da:

index=0 aArray=esto
index=1 aArray=
index=2 aArray=
index=3 aArray=es
index=4 aArray=una
index=5 aArray=cadena
index=6 aArray=
index=7 aArray=
index=8 aArray=de
index=9 aArray=texto

No quiero ir de listillo, pero necesitar 6 veces más código para no hacerlo bien es como volver al esamblador. He intentado hacer aArray=a.trim().split(" ") pero ni con esas...seguro que hay una forma rebuscada de hacerlo, en python no hay que pensar tanto. Además es bastante más lento que python y eso que se ejecuta compilado en bytecode:

$ time python -c "a='esto   es una cadena   de texto'; print a.split()" >/dev/null
real	0m0.026s
user	0m0.020s
sys	0m0.004s
$ time java test > /dev/null
real	0m0.135s
user	0m0.064s
sys	0m0.016s