Primo dubbio su substring

di il
6 risposte

Primo dubbio su substring

Salve a tutti.
Ho appena iniziato a dare un'occhiata alla programmazione in java.
Ho scritto queste poche righe di codice:
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.lang.*;

import javax.swing.JOptionPane;


public class Legge {

	public static void main(String [] args) throws FileNotFoundException, IOException {
		// TODO Auto-generated method stub

		int Quante = 0;
		int wLen = 0;
		int k = 0;
		String strCerca = new String("OCSA");
		String myLetts = new String("");
		// Array
		String[] dizionario = new String[1000000];
		String[] Lett = new String[15];
		
		BufferedReader reader = new BufferedReader(new FileReader("dizionario.txt"));
        String Parola = reader.readLine();
        while(Parola!=null) {
            Parola = reader.readLine();
            if (Parola!=null) {
            dizionario[++Quante] = Parola;
            System.out.println(dizionario[Quante]);
            }
        }
        
        wLen=strCerca.length();
        // carica array con lettere da cercare
        for (int i=0; i <= strCerca.length(); i++) {
        	Lett[i]=strCerca.substring(i, 1);
        }
        
        for (int i=1; i <= Quante; i++) {
        	if (Parola.length()==wLen) {
        		// farò qualcosa ......
        		
        		
        		
        	}
        	
        }
        //FORSE UN GIORNO ........... JOptionPane.showMessageDialog(null, "Finito", "InfoBox: " + "Titolo", JOptionPane.INFORMATION_MESSAGE);
        System.out.println(Quante);
	}

}
E non riesco a verir fuori dall'errore che mi si presenta in questa riga:
Lett[i]=strCerca.substring(i, 1);
eppure "i" è uguale ad "1" e quindi dovrei avere "O" come risultato.

Grazie

6 Risposte

  • Re: Primo dubbio su substring

    Ciao,
    la sintassi di substring è:
    public String substring(int startIndex, int endIndex)

    Come vedi, il secondo parametro è un index, non un offset. In più substring ritorna la substringa dal primo indice incluso al secondo indice ESCLUSO. Quindi substr(1, 1) non ritorna nulla.

    Hai provato Lett=strCerca.substring(i, i+1); ?
  • Re: Primo dubbio su substring

    karug64 ha scritto:


            String Parola = reader.readLine();
            while(Parola!=null) {
                Parola = reader.readLine();
                if (Parola!=null) {
    Innanzitutto, facendo così, ti "perdi" la prima riga del file. Se è voluto (perché es. è una intestazione) allora ok. Altrimenti verifica e correggi.

    karug64 ha scritto:


    dizionario[++Quante] = Parola;
    Facendo così, il primo indice a cui scrivi è dizionario[1]. Mentre in dizionario[0] rimane null. Questo NON va bene in generale (presumo non fosse quello che volevi ..).

    karug64 ha scritto:


            wLen=strCerca.length();
            // carica array con lettere da cercare
            for (int i=0; i <= strCerca.length(); i++) {
            	Lett[i]=strCerca.substring(i, 1);
            }
    Questa parte non mi è chiara ... nel senso che NON ho capito cosa vuoi fare (e perché!).
    Chiarisci perché stai cercando di usare substring lì. Se vuoi estrarre i singoli char c'è chatAr(int index) di String. E anche ammesso di voler estrarre i singoli caratteri, dovresti comunque spiegare meglio a cosa ti serve.
  • Re: Primo dubbio su substring

    Ok. Intanto grazie ad entrambi per le celeri risposte.
    Il mio approccio è il seguente:
    non ho mai programmato in java e ad oggetti.
    Ho sempre programmato in Vb.
    Volendo imparare ho pensato che, in prima istanza, potrei utilizzare java nella maniera più semplice possibile, ovvero senza l'utilizzo di classi e quant'altro, ma in maniera "procedurale" (questo potrebbe aiutarmi a conoscere sintassi e metodi e l'ambiente di sviluppo eclipse ..... su cui per esempio non riesco a sono ancora riuscito come impostare dei punti di controllo, visualizzare il contenuto di variabili....).
    Quindi ho preso un breve programmino scritto in vba (che riporto di seguito) che provvede, dato un numero di lettere, a cercare in un dizionario tutte le corrispondenze che ci sono per una data lunghezza. Esempio OCSA se lunghezza 3 dovrebbe trovare la parola OCA e tutte le altre eventualmente presenti nel dizionario).
    Dopo essere riuscito a fare questo, potrei cercare di modificare il codice cercando di applicare logiche più corrispondenti .....
    /**
    
        ReDim Lett(Len(UserForm1.TextBox2.Text))
        For x = 1 To Len(Trim(UserForm1.TextBox2.Text))
            Lett(x) = Mid(Trim(UserForm1.TextBox2.Text), x, 1)
        Next x
    wLen = Val(UserForm1.TextBox1.Text)
        UserForm1.ListBox1.Clear
        lB0 = LBound(parole)
    For I = lB0 To UBound(parole)
        If Len(parole(I, 1)) = wLen Then
    	K = 0
        myLetts = ""
        For y = 1 To UBound(Lett)
            myLetts = myLetts + Lett(y) + "_"
        Next y
        myLetts = Left(myLetts, Len(myLetts) - 1)
    cW = parole(I, 1)
    For J = 1 To wLen
    myPos = InStr(1, myLetts, Mid(cW, J, 1), vbTextCompare)
    If myPos = 0 Then
    Exit For
    Else
    myLetts = Replace(myLetts, Mid(cW, J, 1), "", , 1, vbTextCompare)
    K = K + 1
    End If
    Next J
    If K = wLen Then
        UserForm1.ListBox1.AddItem cW
    End If
    End If
    DoEvents
    Next I
    MsgBox ("Completato...")
    */
    ANDBIN: non era voluto. Ho corretto ponendo la variabile Quante = -1 in fase di dichiarazione
    la parte che non ti è chiara avrebbe voluto essere il corrispondente di
    For x = 1 To Len(Trim(UserForm1.TextBox2.Text))
            Lett(x) = Mid(Trim(UserForm1.TextBox2.Text), x, 1)
        Next x
    che ora ho modificando, sicuramente in modo macchinoso in
    
    for (int i=0; i <= strCerca.length(); i++) {
            	char l = strCerca.charAt(i);
            	Lett[i]=Character.toString(l);
            }
    MAUROGHIGLIA: per il momento cerco di capire charAt che tra l'altro così come usato mi da errore ....


    Grazie per tutti i consigli vorrete darmi.
  • Re: Primo dubbio su substring

    karug64 ha scritto:


    non ho mai programmato in java e ad oggetti.
    Ho sempre programmato in Vb.
    Allora "dimentica" Vb se vuoi usare Java.

    karug64 ha scritto:


    
    for (int i=0; i <= strCerca.length(); i++) {
            	char l = strCerca.charAt(i);
            	Lett[i]=Character.toString(l);
            }
    Certo che ad un certo punto ti dà errore! Perché hai messo il length come valore compreso nel for (per via del <= invece che < ). Se la stringa ha 10 caratteri gli indici validi sono solo da 0 a 9. Ma tu faresti andare fino a 10 compreso e questo fa schiantare charAt.

    E comunque: dal carattere perché hai bisogno di ottenere un String con quel solo carattere?
  • Re: Primo dubbio su substring

    andbin ha scritto:


    Allora "dimentica" Vb se vuoi usare Java.
    E già ... ma un amore coltivato per 30 anni (eh, già sono un vecchietto .....) non è facile da dimenticare !!!
    Speriamo che java mi faccia appassionare (anche e soprattutto al vostro aiuto in quanto le difficoltà sono parecchie.....)

    Grazie
  • Re: Primo dubbio su substring

    Ti sentirai "vecchietto' ma io ho preso il primo diploma in COBOL nel 1980...
    Conosco la sensazione, è difficile cambiare mentalità ma non c'è nulla da fare: la programmazione è cambiata e noi dobbiamo ragionare in modo diverso.
    Ti do un consiglio: se non ti vuoi ritrovare a scrivere per mesi programmini stile "Hello world!", mettiti a studiare. Se hai le basi non è difficile ma ci vuole molto tempo. Ho studiato Java per anni senza grandi risultati nonostante un diploma in Android Development (soldi buttati) e solo ora che ho un sacco di tempo (fortunatamente) ne sto cavando il ragno dal buco. Ma da giugno ad ora mi ci sono messo 8 ore al giorno cominciando (di nuovo) dalle basi.
    vedo tanti ragazzi su questo forum che credono che passare un esame facendosi fare il programmino da qualcuno più esperto serva ad avere "il pezzo di carta" ma non serve a niente. Studiate, e tanto, prima di scrivere anche una sola linea di programma.
Devi accedere o registrarti per scrivere nel forum
6 risposte