Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    Problema StringBuffer

    Ciao a tutti!
    Io ho questo codice:
    codice:
    import prog.io.ConsoleInputManager; 
    import prog.io.ConsoleOutputManager;
    
    public class ConcatenaStringhe{
    	public static void main(String[] args){
    		ConsoleOutputManager video = new ConsoleOutputManager();
    		ConsoleInputManager tastiera = new ConsoleInputManager();
    		
    		StringBuffer testo1 = new StringBuffer(tastiera.readLine("\nInserire prima Stringa: ") + " ");
    		StringBuffer testo2 = new StringBuffer(tastiera.readLine("\nInserire seconda Stringa: "));
    		StringBuffer concat = new StringBuffer(testo1.length() + testo2.length());
    		char c;
    		int i;
    		
    		for(i = 0; i < testo1.length(); i++){
    			c = testo1.charAt(i);
    			concat.setCharAt(i,c);
    		}
    		for(int j = 0; j < testo2.length(); j++, i++){
    			c = testo2.charAt(j);
    			concat.setCharAt(i,c);
    		}
    		
    		video.println("\nTesto: "+concat);
    	}
    }
    Solo che mi restituisce (all'esecuzione, e non alla compilazione) un errore:
    codice:
    Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 0
               at java.lang.StringBuffer.setCharAt(Unknown Source)
               at ConcatenaStringe.main(ConcatenaStringe.java:17)
    Come mai?
    Ho sbagliato a dichiarare lo StringBuffer per caso?
    Flash Developer for Rich Media
    PHP, jQuery Developer

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Problema StringBuffer

    Originariamente inviato da Miroku
    Come mai?
    Ho sbagliato a dichiarare lo StringBuffer per caso?
    La causa della eccezione è che in 'testo1' hai aggiunto un " " fisso ma non hai tenuto conto di questo carattere quando dimensioni (con la somma delle dimensioni) lo StringBuffer 'concat'.
    Se fai dei setCharAt, lo StringBuffer non si espande.

    Comunque, scusa la curiosità, ma .... non ti bastava un semplice append()???
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3

    Re: Re: Problema StringBuffer

    ma... ma... anche se lo spazio è fisso.... testo1.length() non dovrebbe restituire la lunghezza della stringa inserita più quello spazio lì? .___.

    Originariamente inviato da andbin
    dunque, scusa la curiosità, ma .... non ti bastava un semplice append()???
    eheh no.... è un esercizio preciso dove devo concatenare due stringhe facendolo carattere per carattere... serve per esercitarsi con charAt() e il setCharAt() e lo StringBuffer ^_^
    Flash Developer for Rich Media
    PHP, jQuery Developer

  4. #4
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    il costruttore con il parametro int imposta la capacità e non la lunghezza del buffer
    difatti se provi a stampare concat.length() ti accorgi che è 0
    dunque un charAt(0) o un qualsiasi charAt ritorna l'eccezione

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Re: Re: Problema StringBuffer

    Originariamente inviato da Miroku
    ma... ma... anche se lo spazio è fisso.... testo1.length() non dovrebbe restituire la lunghezza della stringa inserita più quello spazio lì? .___.
    Sorry per la svista, subito mi è sembrato quello ma poi mi sono accorto che il problema ... è un altro, concettuale.

    Quando crei uno StringBuffer passandogli un int, stai solo preimpostando la sua capacità e basta. La sua lunghezza "logica" (length()) è sempre 0 all'inizio!!!

    Dai ... che sennò fai andare fuori strada pure me .....
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    ma.... balordo non dare la colpa a me! XDDDD

    Cmq.... se non imposto la lunghezza allora.... come faccio?
    Flash Developer for Rich Media
    PHP, jQuery Developer

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Miroku
    Cmq.... se non imposto la lunghezza allora.... come faccio?
    setLength() di StringBuffer.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    codice:
    import prog.io.ConsoleInputManager; 
    import prog.io.ConsoleOutputManager;
    
    public class ConcatenaStringhe{
    	public static void main(String[] args){
    		ConsoleOutputManager video = new ConsoleOutputManager();
    		ConsoleInputManager tastiera = new ConsoleInputManager();
    		
    		StringBuffer testo1 = new StringBuffer(tastiera.readLine("\nInserire prima Stringa: ") + " ");
    		StringBuffer testo2 = new StringBuffer(tastiera.readLine("\nInserire seconda Stringa: "));
    		StringBuffer concat = new StringBuffer();
    		concat.setLength(testo1.length() + testo2.length());
    		char c;
    		int i;
    		
    		for(i = 0; i < testo1.length(); i++){
    			c = testo1.charAt(i);
    			concat.setCharAt(i,c);
    		}
    		for(int j = 0; j < testo2.length(); j++, i++){
    			c = testo2.charAt(j);
    			concat.setCharAt(i,c);
    		}
    		
    		video.println("\nStringa Concatenata: "+concat);
    	}
    }
    Funziona! Yuppi!

    Grazie mille
    Flash Developer for Rich Media
    PHP, jQuery Developer

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.