Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    123

    metodo per calcolare numero occorrenze stringhe

    Devo fare il seguente esercizio :
    leggere due stringhe da tastiera (FATTO),
    inserirle in oggetti StringBuffer (FATTO),
    visualizzare posizione iniziale di ciascuna occorrenza della secondra stringa nella prima(PROBLEMA)

    Il problema è che ho utilizzato il metodo IndexOf, che a mio parere sembra il più adeguato per farmi restituire la posizione, ma nonostante ciò non mi restituisce le posizioni corrette.
    Proprio ieri ho studiato la classe StringBuffer (qualche giorno prima la String), ma, forse perchè sono ancora fresco di Java non ne vedo la sua utilità in questo esercizio.

    public static void visualizzaPosizione(String str1, String str2)
    {
    StringBuffer s1 = new StringBuffer(str1);
    StringBuffer s2 = new StringBuffer(str2);
    int pos;

    for(int i=0;i<s2.length();i++)
    {
    for(int j=0;j<s1.length();j++)
    {
    if(s1.charAt(j)==s2.charAt(i))
    {
    pos = str1.indexOf(s2.charAt(j));
    System.out.println("L'occorrenza della stringa2 " +s2.charAt(i)+ " è presente
    nella stringa1 " +s1+ " in posizione "+pos );
    }
    }
    }
    }

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: metodo per calcolare numero occorrenze stringhe

    Originariamente inviato da bobo24
    visualizzare posizione iniziale di ciascuna occorrenza della secondra stringa nella prima(PROBLEMA)

    Il problema è che ho utilizzato il metodo IndexOf

    Proprio ieri ho studiato la classe StringBuffer (qualche giorno prima la String), ma, forse perchè sono ancora fresco di Java non ne vedo la sua utilità in questo esercizio.
    Nemmeno io, infatti. StringBuffer è vero che ha degli indexOf più o meno come String (String ha anche l'indexOf con parametro int ch) ma in questo caso non devi "modificare" nulla, quindi StringBuffer non ti aiuta di più che con String.

    Se vuoi usare indexOf (di String) per trovare *tutte* le occorrenze di una stringa in un'altra, il procedimento dovresti farlo così (lo spiego a parole ... l'implementazione tocca a te ).

    Usi il indexOf di String che ha anche il parametro int fromIndex che è l'indice di partenza. Inizialmente parti da 0. Appena trovi una occorrenza di es. "ciao" ad esempio all'indice 5, il prossimo indexOf lo devi far partire da 5+4 (4 lunghezza della stringa cercata) in modo che presegua da dopo il match e trovi altro. Insomma, vai avanti così fino a quando indexOf ritorna -1 (nessuna occorrenza trovata).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Quoto in tutto andbin, ma aggiungo: come ti devi comportare con stringhe banali, del tipo

    codice:
    String text = "ecco che arrivano le a: aaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
    String pivot = "aaa";
    Nel modo di andbin che si addice per testi non banali o artefatti ed è molto prestante, ti perderesti alcune ripetizioni del pivot - cosa che invece non succede se all'indice di inzio ricerca del successivo aggiungi 1 e non la lunghezza del pivot. Ovviamente in questo secondo caso, le prestazioni decadono.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    123
    Carissimo andbin, ho seguito il tuo consiglio e facendo così mi viene anche se mi da solo la prima occorrenza.
    Quello che ho fatto io è quello che intendevi te nel suggerimento che mi hai dato? oppure intendevi altro? oppure c'era un modo ancora migliore?


    public static void visualizzaPosizione(String str1, String str2)
    {
    StringBuffer s1 = new StringBuffer(str1);
    StringBuffer s2 = new StringBuffer(str2);
    int pos;

    int k=0;
    for(int i=0;i<str2.length();i++)
    {
    if(str1.indexOf(str2.charAt(i), k) != -1)
    {
    pos = str1.indexOf(str2.charAt(i), k);
    System.out.println("L'occorrenza della stringa2 " +str2.charAt(i)+ " è presente
    nella stringa1 " +str1+ " in posizione "+pos );
    }
    }
    }

  5. #5
    Utente di HTML.it L'avatar di bstefano79
    Registrato dal
    Feb 2004
    Messaggi
    2,520
    Prova così

    codice:
    public static void visualizzaPosizione(String str1, String str2)
    	{
    		String[] occorrenze=(str1+" ").split(str2);
    		if(occorrenze.length>1)
    		{
    			System.out.print("L'occorrenza della stringa2 è presente nella stringa1 nelle posizioni");
    			  int indice=0;
    			  for (int i=0;i<occorrenze.length-1;i++) {
    				  String string=occorrenze[i];
    				  System.out.print(" "+(indice+string.length()+1));
    				  indice+=string.length()+str2.length();
    			}
    
    		}
    		else
    		{
    			System.out.println("L'occorrenza della stringa2 non è presente nella stringa1 ");
    		}
    
    	}

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.