Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2014
    Messaggi
    30

    Sostituire StringBuffer

    Salve ragazzi avrei bisogno di aiuto.
    Lavorando su un progetto dopo averlo mandato su kiuwan per avere un riscontro sulla qualità, è presente questo difetto:
    Avoid using StringBuffer to store a String that is never modified.

    Via allego una porzione di codice nella quale è presente il problema:

    codice:
    private void runScript(Connection conn, Reader reader) throws IOException,
        SQLException {
            StringBuffer command = null;
            try {
                LineNumberReader lineReader = new LineNumberReader(reader);
                String line = null;
                while ((line = lineReader.readLine()) != null) {
                    String trimmedLine = line.trim();
                    doTrimmedLine(command, trimmedLine);
    
    
    
    
                    if (doTrimmed(trimmedLine)) {
    
    
                    } else if (full(trimmedLine)) {
    
    
                        Pattern pattern = Pattern.compile(DELIMITER_LINE_REGEX);
                        Matcher matcher = pattern.matcher(trimmedLine);
                        if (matcher.matches()) {
                            setDelimiter(trimmedLine
                                    .split(DELIMITER_LINE_SPLIT_REGEX)[1].trim(),
                                    fullLineDelimiter);
                            line = lineReader.readLine();
                            if (line == null) {
                                break;
                            }
                            trimmedLine = line.trim();
                        }
    
    
                        command.append(line.substring(0,
                                line.lastIndexOf(getDelimiter())));
                        command.append(" ");
                        PreparedStatement statement = conn.prepareStatement(null);
    
    
    
    
    
    
                        boolean hasResults = false;
                        doStatement(hasResults, statement, command, conn);
    
    
                        ResultSet rs = statement.getResultSet();
                        String sb = new String();
    
    
                        doResult(hasResults, rs, sb);
    
    
                        command = null;
    
    
                        doStackTrace(rs, statement);
                    } else {
                        Pattern pattern = Pattern.compile(DELIMITER_LINE_REGEX);
                        Matcher matcher = pattern.matcher(trimmedLine);
                        if (matcher.matches()) {
                            setDelimiter(trimmedLine
                                    .split(DELIMITER_LINE_SPLIT_REGEX)[1].trim(),
                                    fullLineDelimiter);
                            line = lineReader.readLine();
                            if (line == null) {
                                break;
                            }
                            trimmedLine = line.trim();
                        }
                        command.append(line);
                        command.append(" ");
                    }
                }
    
    
            }
    
    private void doTrimmedLine(StringBuffer command, String trimmedLine) {
            if (command == null) {
                command = new StringBuffer();
            }
    
    
            if (trimmedLine.startsWith("--")) {
    
    
            }
        }
    In che modo potrei risolvere il problema?? Grazie...

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Mauro94 Visualizza il messaggio
    In che modo potrei risolvere il problema?? Grazie...
    Guarda bene il doTrimmedLine. Se il parametro è null, tu assegni un nuovo StringBuffer al parametro. Il parametro è una variabile locale al metodo, ben distinta rispetto a qualunque cosa abbia passato il chiamante. Il parametro command non c'entra niente con il command nel runScript (se non per il fatto che inizialmente il parametro ha lo stesso valore del command passato dal chiamante). Ovvero se assegni al parametro command, NON cambi il valore della variabile command che ha il chiamante cioè runScript.

    Se questo concetto di passaggio dei valori non ti è chiaro, riprendi pure in mano un libro su Java ... dalle prime pagine. (detto senza cattiveria .. ovviamente )
    Ultima modifica di andbin; 07-12-2015 a 15:15
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2014
    Messaggi
    30
    E quindi? Io volevo sapere come poter sostituire lo StringBuffer senza cambiare più di tanto il codice....capisco la questione del passaggio di parametri

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2014
    Messaggi
    30
    Mi spiego meglio ciò che mi crea problemi e l'append del runScript. Come potrei fare? Perchè dichiarando command String l'append non sarebbe più riconosciuto....

  5. #5
    I computer sono incredibilmente veloci, accurati e stupidi.
    Gli uomini sono incredibilmente lenti, inaccurati e intelligenti.
    Insieme sono una potenza che supera l'immaginazione.

    A.Einstein

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2014
    Messaggi
    30
    Kiuwan mi dice di non utilizzare anche StringBuilder....aiuto

  7. #7
    Che è sto kiuwan?
    Si sono inventati un'altra diavoleria?
    E' così stringente rispettare i passi?
    E' un progetto personale, di lavoro o universitario?
    I computer sono incredibilmente veloci, accurati e stupidi.
    Gli uomini sono incredibilmente lenti, inaccurati e intelligenti.
    Insieme sono una potenza che supera l'immaginazione.

    A.Einstein

  8. #8
    Devi usare necessariamente uno StringBuffer o simile?
    Non puoi crearti una lista (LinkedList) o Vettore (Vector) di stringhe?
    codice:
    LinkedList<String> list=new LinkedList<String>();
    Vector<String> list=new Vector<String>();
    e adattarli al tuo scopo?

    Ciao.
    I computer sono incredibilmente veloci, accurati e stupidi.
    Gli uomini sono incredibilmente lenti, inaccurati e intelligenti.
    Insieme sono una potenza che supera l'immaginazione.

    A.Einstein

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2014
    Messaggi
    30
    Anche String andrebbe bene solo che andando a sostituire i metodi append con += kiuwan mi da un altro errore dicendo di riutilizzare strinbuffer

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Mauro94 Visualizza il messaggio
    Anche String andrebbe bene solo che andando a sostituire i metodi append con += kiuwan mi da un altro errore dicendo di riutilizzare strinbuffer
    Ogni volta che concateni stringhe con il + / +=, viene usato sotto-sotto un StringBuffer (pre Java 5) o StringBuilder (da Java 5) che poi viene buttato via. Quindi è un problema (di memoria e di performance) specialmente se fatto continuamente in loop. Quindi la concatenazione no.

    Immagino che sei sicuramente >= Java 5, quindi puoi usare StringBuilder che rispetto a StringBuffer non è thread-safe ma va benissimo in un contesto "locale" come in un metodo o comunque nel contesto di un unico thread.

    Ma il punto non è tanto StringBuffer vs StringBuilder. La questione grossa iniziale te l'ho segnalata io all'inizio: nel doTrimmedLine istanziavi un StringBuffer che sostanzialmente non poteva essere utile al chiamante.
    Quindi sei ancora su questo design (e se sì, perché?) oppure no?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.