Salve ragazzi,
Scrivo dopo tanti anni qui più che altro come sfogo che come altro...
Ho passato parte del pomeriggio e della notte a cercare di capire perchè il mio software che analizza un file di 700kb contenente circa 100.000 numeri all'interno ci mettesse 2 secondi e rotti quando alla fine sono arrivato alla conclusione che la funzione Double.parseDouble() del Java quando viene richiamata moltissime volte (come nel mio caso) è mooooooooooooooooooooooooooooooooooolto lenta!

Vi posto il codice che io ho utilizzato ed utilizzo ancora adesso (probabilmente utilizzerò per il resto della vita! ) e che mi ha consentito di ridurre i tempi a 400ms.

codice:
    //dato un numero stringa e la posizione in cui si trova la virgola ottiene la parte intera
    private static double getInteger(String text, int pointIndex)
    {
        double result=0;
        int cnt=0;

        int startIndex=0;
        int endIndex=text.length();
        if(pointIndex!=-1)
            endIndex=pointIndex-1;
        
        for(int i=endIndex;i>=startIndex;i--)
        {
            char c=text.charAt(i);
            if(c<'0' || c>'9')
                throw new IllegalStateException("CHARACTER "+c+" AT POSITION "+i+" ISN'T DIGIT!");
            
            double once=(c-'0')*(Math.pow(10, cnt));
            result+=once;
            ++cnt;
        }

        return result;
    }

    //dato un numero stringa e la posizione in cui si trova la virgola ottiene la parte decimale
    private static double getDecimal(String text, int pointIndex)
    {
        double result=0;
        int cnt=1;

        int startIndex=pointIndex+1;
        int endIndex=text.length();
        if(pointIndex==-1)
            startIndex=endIndex+1;

        for(int i=startIndex;i<endIndex;i++)
        {
            char c=text.charAt(i);
            if(c<'0' || c>'9')
                throw new IllegalStateException("CHARACTER "+c+" AT POSITION "+i+" ISN'T DIGIT!");

            double once=(c-'0')*(1/Math.pow(10,cnt));
            result+=once;
            ++cnt;
        }

        result=MathUtil.round(result, cnt-1);
        return result;
    }
    
    //alla rinfusa!!!
    public static Double parseDouble(String value)
    {
        Double result=null;
        try
        {
            int fromIndex=0;
            int sign=value.charAt(0);
            double multiply=1.0;
            switch (sign)
            {
                case '+':
                    multiply=1.0;
                    fromIndex=1;
                    break;
                case '-':
                    multiply=-1.0;
                    fromIndex=1;
                    break;
            }

            value=value.substring(fromIndex);
            int pointIndex=value.indexOf('.');
            if(pointIndex==-1)
                pointIndex=value.indexOf(',');

            double integer=getInteger(value, pointIndex);
            double decimal=getDecimal(value, pointIndex);
            result=(integer+decimal)*multiply;
        }
        catch(Exception ex)
        {
            result=null;
        }

        return result;
    }
Se ci sono dei bug ditemi con che numero state provando che vedo subito di rimediare!
Ciao, ale500.