Visualizzazione dei risultati da 1 a 5 su 5

Discussione: concat. stringhe

  1. #1

    concat. stringhe

    devo fare un esercizio che legge una seq di stringhe conclusa da stringa vuota e stampa una stringa con le inziali di tutte le stringhe lette.

    codice:
    public class Esercizio { 		
    public static void main (String args[]) { 		 		  		
         String s2 = " "; 	 		
         char x; 		 			
         String s = "";  			
             while (!s.equals(" ")) { 				   					 
                 s = Input.readString("Immetti una stringa: "); 					 
                 x =  s.charAt(0);  					  					  
                 s2 = s2+x;  					   			                                                                  System.out.println(s2);  			
               } 			 	 			   
          } 
    }
    Quando lo eseguo però, se digito una stringa vuota mi dà:
    Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 0
    at java.lang.String.charAt(String.java:686)
    at es3.main(es3.java:12)

    Cosa sbaglio?

  2. #2
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    755

    Re: concat. stringhe

    Originariamente inviato da djmary
    Quando lo eseguo però, se digito una stringa vuota mi dà:
    Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 0
    at java.lang.String.charAt(String.java:686)
    at es3.main(es3.java:12)

    Cosa sbaglio?
    Sbagli dove fai:

    codice:
    s.charAt(0);
    stai cercando di prendere il primo di carattere di una stringa vuota , stringa che non ha caratteri , quindi viene lanciata l'eccezione..ti basta aggiungere un ulteriore controllo.
    Inoltre un suggerimento che ti do è quello di usare uno StringBuilder per creare la stringa (otterrai il suo contenuto al termine con il metodo "toString")..come saprai String è un oggetto immutabile quindi ad ogni concatenazione non fai altro che creare una nuova stringa mentre lo StringBuilder è l'elemento apposito per la costruzione di stringhe (salvo il caso di lavoro su più thread , non essendo "thread-safe" StringBuilder , in quel caso è meglio usare StringBuffer)


  3. #3
    Ho capito cosa intendi, ma nn riesco a capire dove devo mettere il controllo.

    Al momento della stringa vuota, il programma mi deve dare il risultato, quindi io avevo messo un if in fondo:
    codice:
    public class esercizio { 		
    public static void main (String args[]) { 		 		  		
    String s2 = " "; 	 		
    char x; 		 			
    String s = "";  			
        while (!s.equals(" ")) { 				   					 
             s = Input.readString("Immetti una stringa: "); 					 
             x =  s.charAt(0);  				 					  
             s2 = s2+x;         		 	
          } 
    
         if (s.equals(" "))  { 			 
                 System.out.println(s2);  		
                 }   			 	   
    } 
    }
    Ma continu a darmi lo stesso errore.

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    755
    emmm no
    Partendo dal fatto che le due stringhe " " (stringa con uno spazio) e "" (stringa vuota , senza inserire niente) sono diverse , tu vorresti che l'input terminasse quando viene inserita la stringa vuota "" e non " " come hai fatto , piccola correzione..
    Inoltre se tu effettui il controllo alla fine come da te fatto , quello verrà effettuato all'uscita dal "while" ma intanto dentro il while se inserisci la stringa vuota l'eccezione la ottieni lo stesso..quindi o riscrivi diversamente la struttura del codice oppure il controllo lo devi mettere dentro il while..puoi fare ad esempio così:

    codice:
    while (!(s = Input.readString("Immetti una stringa: ")).equals("")) { 			          
                 x =  s.charAt(0);  				 					  
                 s2 = s2+x;         		 	
    }
    System.out.println (s2);

  5. #5
    Capito!
    Grazie mille per l'aiuto!
    Gentilissimo!

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.