Visualizzazione dei risultati da 1 a 5 su 5

Discussione: Substring

  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2011
    Messaggi
    43

    Substring

    Ciao a tutti, sono novello nella programmazione Java e in questi giorni mi sto esercitando in diversi esercizi che ho trovato in rete. Oggi mi sono imbattuto in un che mi sta dando non pochi problemi.
    Riporto di seguito il testo dell'esercizio:

    codice:
    Scrivere un metodo filtra che, data una stringa A e una stringa B,
    restituisce una nuova stringa ottenuta da B scartando i caratteri 
    che appaiono anche in A. 
    Ad esempio, se B="totti" e A="st" il risultato deve essere: "oi".
    Ho quindi scritto il codice per fare questo, ma il programma non funziona e mi genera un errore che non riesco a trovare.
    Di seguito il codice:

    codice:
    package test;
    
    import javax.swing.JOptionPane;
    
    public class Filter {
        String string1;
        String string2;
        
        Filter() {
            this.string1 = JOptionPane.showInputDialog("Inserie la prima stringa");
            this.string2 = JOptionPane.showInputDialog("Inserie la seconda stringa");
        }
        
        public void calculation() {
            int l1 = this.string1.length();
            int l2 = this.string2.length();
            
            for(int i=0; i<l1; i++) {
                char c1 = this.string1.charAt(i);
                for(int j=0; j<l2; j++) {
                    char c2 = this.string2.charAt(j);
                    if(c1==c2 & j==0) {
                        this.string2 = this.string2.substring(1);
                    }
                    if(c1==c2 & j>0) {
                        this.string2 = this.string2.substring(0,j)+this.string2.substring(j+1, this.string2.length());
                    }
                }
            }
        }
        
        public void print() {
            System.out.println("Il risultato del processo di filtramento e': "+string2);
    
        }
        
        public static void main(String args[]) {
            Filter f = new Filter();
            f.calculation();
            f.print();
        }   
    }
    Riporto anche l'errore che mi genera:

    codice:
    Exception in thread "main" java.lang.StringIndexOutOfBoundsException: 
    String index out of range: 3
    	at java.lang.String.charAt(String.java:686)
    	at test.Filter.calculation(Filter.java:21)
    	at test.Filter.main(Filter.java:39)
    Java Result: 1
    Mi rivolgo quindi a voi per un aiuto.
    Grazie

  2. #2
    Utente di HTML.it L'avatar di neroux
    Registrato dal
    Aug 2009
    Messaggi
    1,973
    Il problema è che cambi string2 dentro il for e quindi il valore di l2 viene reso invalido.

    www.sitemeer.com » Quando un sito pare irraggiungibile

    Se ti piace ci puoi trovare anche su Facebook

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2011
    Messaggi
    43
    Potresti darmi un suggerimento su come oviare a questo problema per favore

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2011
    Messaggi
    43
    ho riscritto la funzione calculation() in questo modo qui:

    codice:
        
    public void calculation() {
            int l1 = this.string1.length();
            int l2 = this.string2.length();
            
            for(int i=0; i<l1; i++) {
                char c1 = this.string1.charAt(i);
                String tmp = "";
                for(int j=0; j<l2; j++) {
                    char c2 = this.string2.charAt(j);
                    if(c1!=c2) {
                        tmp = tmp+this.string2.substring(j,j+1);
                    }
                }
                this.string2 = tmp;
            }
        }
    se provo la combinazione "st" "totti", funziona tutto, qualsiasi altra combinazione mi genera lo stesso errore di prima, perche'?

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2011
    Messaggi
    43
    Non riesco proprio a venirne a capo, ho provato a fare questo semplice esercizio utilizzando la classe StringBuffer, che ha il metodo delete, ma quando metto l'istruzione dentro un ciclo, non funziona piu' nulla.

    codice:
    package test;
    
    import javax.swing.JOptionPane;
    
    public class Subst {
        char c;
        String string1;
        
        Subst() {
            this.c = 'f';
            this.string1 = JOptionPane.showInputDialog("Inserie una stringa");
        }
        
        public void calculation() {
            StringBuffer x = new StringBuffer("afefifofu");
            int tmp = 0;
            while( tmp<9) {
                if(tmp%2!=0) {
                    x.delete(tmp,tmp+1);           
                }
                tmp++;
            }
            this.string1 = x.toString();
        }
        
        public void print() {
            System.out.println("Il risultato del processo di inserimento e': "+string1);
    
        }
        
        public static void main(String args[]) {
            Subst s = new Subst();
            s.calculation();
            s.print();
        }   
    }
    come posso fare?

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.