Metodi legati alle strighe

di il
25 risposte

Metodi legati alle strighe

Ciao a tutti. Ho iniziato da pochi giorni a studiare Java e tante cose non mi sono ancora chiare ,soprattutto argomenti legati alle stringhe. Dovrei trovare un metodo che mi dica se in una stringa è presente un certo carattere? E sapete un sito che possa chiarirmi i molti dubbi? Grazie

25 Risposte

  • Re: Metodi legati alle strighe

    Basta che cerchi in internet,ti consiglio però di imparare le basi da un libro e non cercando i singoli argomenti su internet,ciao
  • Re: Metodi legati alle strighe

    Sandro99 ha scritto:


    Dovrei trovare un metodo che mi dica se in una stringa è presente un certo carattere?
    Se è solo questo, String ha i metodi indexOf() per ottenere l'indice di un carattere/stringa presente in una stringa. Oppure -1 se non presente.

    Sandro99 ha scritto:


    Ho iniziato da pochi giorni a studiare Java e tante cose non mi sono ancora chiare
    Va bene .. ovviamente è normale. Cerca anche di prendere confidenza con la documentazione javadoc ufficiale.
  • Re: Metodi legati alle strighe

    Grazie mille per l'aiuto, ma mi sono dimenticato di specificare che doveva essere un metodo per una funzione non booleana.
  • Re: Metodi legati alle strighe

    Sandro99 ha scritto:


    doveva essere un metodo per una funzione non booleana.
    Ma non è un problema: se index trovato diverso da -1 (questo è un "booleano")
  • Re: Metodi legati alle strighe

    Ciao, ho provato a realizzare una funzione ma senza successo, ti spiego cosa devo realizzare:
    Devo creare una funzione che conti le parole inserite in una stringa basandosi sui caratteri di una seconda stringa. Se la seconda stringa è vuota prende priorità lo spazio.
    Esempio:
    ("a b c d",".,") Return 4
    ("a b. c d",".,") Return 2
    ("a b. c ,d",".,") Return 3
  • Re: Metodi legati alle strighe

    Sandro99 ha scritto:


    Devo creare una funzione che conti le parole inserite in una stringa basandosi sui caratteri di una seconda stringa. Se la seconda stringa è vuota prende priorità lo spazio.
    Sì ho capito la logica. La priorità sullo spazio è un attimo da capire. Tu dici quando "la seconda stringa è vuota" ma nel tuo primo esempio la seconda stringa NON è vuota, bensì accade che nella prima stringa non c'è nessuno dei caratteri della seconda.

    Comunque è fattibile, lo spiego a parole. Devi partire dalla prima stringa. Per ogni carattere: è un carattere presente nella seconda stringa? Se sì, hai trovato un separatore e puoi prendere una parola fino a quel punto (escluso il separatore). Poi riparti tenendoti l'indice di inizio della successiva parola, ecc...
    paperino,topolino,pippo
    |       |        |
    0       8        17
    Tieni all'inizio uno start=0 poi prosegui e trovi "," quindi puoi prendere la parola tra gli indici 0 e 7 compresi. Metti start=9 (il successivo dopo il separatore) e ripeti la logica, ecc...

    Il fatto della "priorità" allo spazio devi chiarirlo e complica solo un pochino.

    P.S. si tratta di "ragionare" ..
  • Re: Metodi legati alle strighe

    Ciao, a livello teorico ho capito come realizzare la funzione ma non riesco a metterla in pratica. Ho dei problemi con i caratteri della seconda stringa, ho inizializzato una variabile per contare le parole e dentro un for ho inserito un if che controlla se il carattere è diverso da spazio e quello successivo è uguale a spazio a la variabile aumenta di uno. Ma non riesco a scrivere lo stesso codice con la parte della seconda stringa.. grazie!!
  • Re: Metodi legati alle strighe

    Sandro99 ha scritto:


    Ciao, a livello teorico ho capito come realizzare la funzione ma non riesco a metterla in pratica. Ho dei problemi con i caratteri della seconda stringa
    Fai un passo per volta, "dimentica" solo per un attimo la seconda stringa e quella gestione speciale dello spazio. Data una stringa come quella che ho riportato prima:

    String input = "paperino,topolino,pippo";

    spezzala con la logica che ho descritto, usando "," fisso come separatore. Ogni parola che estrai la stampi con un System.out.println() e nulla di più. Se già non riesci in questo, al resto non ci arrivi.
    Te lo ripeto, è abbastanza semplice, devi avere una variabile che tiene l'indice di inizio di ogni parola. E poi fai un for per indice i da 0 per < lunghezza. L'unica cosa particolare su cui ragionare riguarda l'ultima parola ... perché non c'è un "," al fondo.
  • Re: Metodi legati alle strighe

    Ok, ho capito cosa intendi ma il mio problema riguarda più di un carattere speciale. ho creato due variabili per la lunghezza delle stringhe: una per la lunghezza della prima stringa(i) e quella per la stringa dei caratteri speciali(y). Con un"FOR" leggo tutti i caratteri della prima stringa e con un "if" verifico se il carattere è un delimitatore o no. Che metodo devo scrivere nel "if" per confrontare un carattere della prima stringa con tutti i caratteri della seconda?
  • Re: Metodi legati alle strighe

    Sandro99 ha scritto:


    Che metodo devo scrivere nel "if" per confrontare un carattere della prima stringa con tutti i caratteri della seconda?
    Lo avevo già detto: indexOf. Ma fai uno step per volta.
  • Re: Metodi legati alle strighe

    Grazie per l'aiuto . Utilizzando l'indexOF sono riuscito a verificare se nella stringa è presente il carattere della seconda stringa, ma il numero delle parole aumenta per ogni lettera della prima stringa e non riesco a scrivere una riga di comando che mi controlli se il carattere di "i" sia diverso da un carattere della seconda stringa e che il carattere di "i+1" sia uguale a un carattere presente sulla seconda stringa.

    if (m.indexOf(n.substring(j)) > -1){ m=prima stringa ;n=seconda stringa ;word=contatore di parole
    word++;
    }else{
    word = 0;
    }
    Cosa posso fare per migliorare l'if?
  • Re: Metodi legati alle strighe

    Sandro99 ha scritto:


    Grazie per l'aiuto . Utilizzando l'indexOF sono riuscito a verificare se nella stringa è presente il carattere della seconda stringa, ma il numero delle parole aumenta per ogni lettera della prima stringa e non riesco a scrivere una riga di comando che mi controlli se il carattere di "i" sia diverso da un carattere della seconda stringa e che il carattere di "i+1" sia uguale a un carattere presente sulla seconda stringa.
    Purtroppo non è facile darti un aiuto e capire i tuoi dubbi. Quello che posso farti vedere è cosa intendevo prima io.
    Guarda quanto è facile estrarre le parole, prova questo:
    public class ProvaParole {
        public static void main(String[] args) {
            String input = "paperino,topolino,pippo";
    
            for (int s = 0, i = 0; i <= input.length(); i++) {
                if (i == input.length() || input.charAt(i) == ',') {
                    System.out.println("Parola trovata: \"" + input.substring(s, i) + "\"");
                    s = i + 1;
                }
            }
        }
    }
  • Re: Metodi legati alle strighe

    Public static int count(String m, String n) { ("paperi.notopoli,nopippo",".,")
    int word = 1;
    int i = 0, l = 0;
    for (i = 0; i < m.length() - 1; i++) {
    if(m.indexOf(l)> -1) {
    word++;
    }
    }
    return word;
    }
    }
    Non riesco a capire cosa devo scrivere nell'if per verificare che il valore della "i" sia uguale a un valore qualsiasi della "l" e il valore di "i+1" (quello successivo ) sia completamente diverso .
  • Re: Metodi legati alle strighe

    Sandro99 ha scritto:


            int word = 1;
            int i = 0, l = 0;
            for (i = 0; i < m.length() - 1; i++) {
                if(m.indexOf(l)> -1) {
                    word++;
                }
            }
    Quello che hai scritto purtroppo non ha senso (e non funziona di certo).

    Guarda il mio esempio. Io ho messo

    input.charAt(i) == ','

    perché nel "mio" esempio ho scelto di trattare fisso solo ','. Nel tuo caso i separatori sono in un'altra stringa es. ",.".
    Vuol solo dire che input.charAt(i) cioè il carattere i-esimo lo dovrai passare al indexOf per CERCARLO nella seconda stringa.
Devi accedere o registrarti per scrivere nel forum
25 risposte