no, tu fai
stringa ancora non è inizializzata, provi a chiamare un metodo su un oggetto che ancora non hai valorizzato (quindi su null).codice:String stringa =null; while(sc.hasNext()){ if(stringa.equals("fine")){
Va in eccezione stringa.equals, questo, indipendentemente da quanto vale quello con cui confronti.
Se ad esempio tu avessi fatto "fine".equals(stringa) avresti avuto false, senza eccezioni (vediamo se ti rendi conto del perché).
Riguardo al pattern: ti rispondo quando passa il mal di testa e ragiono meglio