/** * TextContainer * Contenitore di testo. * * @author Adriano Luchetta * @version 7-Nov-2007 * @version 28-Ott-2006 * @version 28-Ott-2003 */ import java.util.Scanner; import java.util.NoSuchElementException; public class TextContainer { //parte privata private String[] line; private int lineSize; /** costruttore del contenitore di testo */ public TextContainer() { line = new String[1]; lineSize = 0; } /** inserisce una riga nel contenitore di testo @param aLine la riga da inserire */ public void add(String aLine) { //Gestione della pre-condizione if (aLine == null) return; // ridimensionamento di line[] ***Array dinamico *** if (lineSize == line.length) { String[] newLine = new String[2 * line.length]; for (int i = 0; i < line.length; i++) newLine[i] = line[i]; line = newLine; } // inserimento di aLine line[lineSize] = aLine; // incremento del contatore deli elementi dell'array riempito parzialmente lineSize++; } /** estrae la prima riga del testo. Motodo non ottimizzato @return la prima riga del testo se il contenitore non e' vuoto, altrimenti null @throws java.util.NoSuchElementException se il contenitore e' vuoto */ public String remove() { if (isEmpty()) throw new NoSuchElementException(); //appoggio temporaneo dell'elemento di indice 0 String tmpString = line[0]; // eliminazione dell'elemento di indice 0 for (int i = 0; i < lineSize-1; i++) //spostamento a sinistra di line[] line[i] = line[i+1]; // decremento del contatore degli elementi dell'array riempito parzialmente lineSize--; return tmpString; } /** verifica se il contenitore e' vuoto @return true se il contenitore e' vuoto, altrimenti false */ public boolean isEmpty() { return lineSize == 0; } /** esegue la sostituzione nel testo di una parola con un'altra @param find la parola da sostituire @param replacement la parola sostitutiva @return il numero di sostituzioni eseguite @throws IllegalArgumentException se find o replacement hanno valore null */ public int replace(String find, String replacement) { //Gestione delle pre-condizioni if (find == null || replacement == null) throw new IllegalArgumentException(); int count = 0; //contatore delle parole sostituite for (int i = 0; i < lineSize; i++) { Scanner st = new Scanner(line[i]); String tmpLine = ""; boolean found = false; while (st.hasNext()) { String token = st.next(); //inserimento in tmpLine if (token.equals(find)) { token = replacement; count++; found = true; } tmpLine = tmpLine + token +" "; } if (found) line[i] = tmpLine; } return count; } }