Trovare caratteri doppi consecutivi in una stringa

di il
4 risposte

Trovare caratteri doppi consecutivi in una stringa

Ciao community sono alle prese con un programma in Java in cui ho bisogno di individuare le parole che contengono doppie. Personalmente però non ho solo un idea rozza in testa sul come fare, per questo volevo chiedervi: esiste un modo semplice di leggere una stringa e individuare la presenza di caratteri doppi consecutivi? Ha senso usare le espressioni regolari?

Es: La stringa "urrvucyrzzzooxhx" contiene ben 3 doppie
Grazie

4 Risposte

  • Re: Trovare caratteri doppi consecutivi in una stringa

    Devi fare un ciclo che passa la stringa carattere per carattere e verificare se il carattere corrente é uguale al carattere successivo.
    Inizia con lo scrivere una funzione che dato in input una stringa stampa a video i singoli caratteri
  • Re: Trovare caratteri doppi consecutivi in una stringa

    Menghins ha scritto:


    Ciao community sono alle prese con un programma in Java in cui ho bisogno di individuare le parole che contengono doppie. Personalmente però non ho solo un idea rozza in testa sul come fare, per questo volevo chiedervi: esiste un modo semplice di leggere una stringa e individuare la presenza di caratteri doppi consecutivi? Ha senso usare le espressioni regolari?
    L'utilizzo di una espressione è assolutamente possibile. Solo che serve una espressione abbastanza particolare, perché devi trovare due caratteri consecutivi uguali e oltretutto senza sapere a priori quali. Nel gergo delle espressioni regolari bisogna usare quello che si chiama "backreference" e serve almeno un capturing group a cui appunto fare riferimento.

    A parte questo ci sono approcci anche più semplici, ad esempio: ciclo sui caratteri, poi per qualunque indice i > 0 (quindi escluso il primo carattere), se il carattere all'indice i è uguale a quello all'indice i-1 hai trovato una doppia.
  • Re: Trovare caratteri doppi consecutivi in una stringa

    Ho già risolto il mio quesito in maniera iterativa, e ora vorrei riprovare usando un espressione regolare

    public boolean TestHaveDouble(String stringToMatch) {
    String doppie = "(\\w)\\1+";
    Pattern p = Pattern.compile(doppie);
    Matcher m = p.matcher(stringToMatch);

    if (m.find())
    return true;
    return false;
    }

    Tuttavia ho un dubbio sul fatto che l'espressione pur riuscendo a trovare i caratteri doppi all'interno di una parola, non possa distinguere i risultanti che contengono solo le doppie dai risultati che tre occorrenze consecutive dello stesso carattere o più
  • Re: Trovare caratteri doppi consecutivi in una stringa

    Menghins ha scritto:


    Tuttavia ho un dubbio sul fatto che l'espressione pur riuscendo a trovare i caratteri doppi all'interno di una parola, non possa distinguere i risultanti che contengono solo le doppie dai risultati che tre occorrenze consecutive dello stesso carattere o più
    Con l'espressione in stringa "(\\w)\\1+" catturi qualunque sequenza di 2 o più lettere uguali. Se fai solo un find, con un input "aaabbcccc" esso prende subito "aaa" .. non "bb".
    Se usassi la espressione in stringa "(\\w)\\1" (senza +) catturi 2 lettere uguali ma ... potrebbero essere in una sequenza di più di 2 lettere. Quindi con un solo find e con un input "aaabbcccc" idem prende subito "aa".

    A "naso" non credo si possa fare una espressione regolare che con un solo find vada a prendere esattamente una coppia di lettere che non siano dentro una sequenza più lunga. Credo nemmeno usando i costrutti avanzati che sono i lookahead e lookbehind. Ma non ne sono sicuro al 100%. Dovrei fare un po' di esperimenti per valutare se è possibile o no.

    Continuando ad usare "(\\w)\\1+", quello che sicuramente puoi fare è il find in loop (while) cioè finché find() dà true e poi verificare la lunghezza della stringa catturata da group(). Se è lunga esattamente 2 allora hai una vera coppia.
Devi accedere o registrarti per scrivere nel forum
4 risposte