Lag et program som teller og skriver ut hvor mange blanke tegn (mellomrom) og
hvor mange tegn totalt som finnes i en tekstfil. Fil skal velges ved hjelp av
en JFileChooser
. De opptelte
antall tegn og blanke tegn skal skrives ut i hvert sitt tekstfelt. Bruk et
FileReader-objekt ved fil-lesing.
Programmet skal behandle eventuelle unntakssituasjoner som kan tenkes å oppstå.
Character.isSpaceChar( tegn )
, der parameteren tegn
er av
datatype char
. (Linjeskifttegn blir da også regnet som blanke tegn,
men det godtas i denne oppgaven.)
I uke 3, oppgave 2 fikk du som oppgave å programmere en sammenkjedet liste der hver listenode inneholdt et helt tall. Utvid dette programmet slik at hver gang brukeren klikker på vinduets lukkeknapp for å avslutte, så blir tallene som er lagt inn i lista skrevet til en fil før programmet blir avsluttet. Når programmet starter opp igjen, skal tallene leses inn igjen fra fil og legges inn i lista (i samme rekkefølge som de hadde ved utskrift). Innholdet i lista skal deretter skrives ut på skjermen.
Det er greiest å definere egne metoder for skriving til fil og lesing fra fil. Bruk filobjekt av type DataOutputStream for skriving til fil. Les fila inn igjen som en DataInputStream. (I denne oppgaven skal altså listeinnholdet ikke skrives til fil i form av objekter. Det er bare selve tallverdiene som lista inneholder som skal skrives til fil.)
Queue
som representerer en kø av voksende
kønumre, slik vi for eksempel opplever det når vi trekker kønumre i et postkontor
eller en butikk. Køen skal programmeres i form av en sammenkjedet liste av
objekter som inneholder et helt tall (kønummeret). Du kan bruke samme klasse
Heltallsnode
som ble brukt i oppgavene til uke 3. I kø-klassen
må det være operasjoner for å stille i kø (trekke kønummer) og for å bli
ekspedert (bli fjernet fra køen). Dessuten kan det være nyttig å ha en
operasjon for å sjekke om køen er tom.
Queue
-klassen ved å skrive et
program med programvindu tilsvarende som det som er vist til høyre.
Programmet skal inneholde et Queue
-objekt
som representerer selve køen.
Ved klikk på knappen "Trekk kønummer" skal et nytt kønummer legges inn i
køen og vises i tekstfeltet til høyre for knappen.
Ved klikk på knappen "Ekspeder neste" skal det kønummer som er forrest i køen
(dvs. som har vært der lengst) tas ut av køen og vises i tekstfeltet til høyre
for knappen. Dersom køen er tom når det blir klikket på knappen, må det isteden
vises en melding om dette. Som kønumre kan du bruke tallene fra 1 og oppover
fortløpende.
//Returnerer en streng der alle forekomster av strengen ut i strengen kilde //er erstattet av strengen inn, mens strengen for øvrig har samme innhold //som kilde. Forutsetter at strengene ut og inn er like lange. public String byttUt( String kilde, String ut, String inn ) { ... }b) Implementer følgende metode som gjør bruk av metoden fra a):
//Leser innfil linje for linje , erstatter alle forekomster av ut //med inn (ved bruk av metode byttUt på hver linje) og skriver til utfil. //Parametrene innfil og utfil er filnavn (eller filsti) for filene som skal //leses og skrives. Strengene ut og inn forutsettes like lange. //(Les innfil i form av en BufferedReader, skriv utfil i form av en //PrintWriter.) public void genererNyFil( String innfil, String utfil, String ut, String inn ) { ... }c) Lag et testprogram som benytter metodene i a) og b). Brukeren skal få anledning til å velge hvilken fil som skal behandles. Bruk et dialogvindu av type JFileChooser for valg av fil. Som input til programmet skal brukeren dessuten gi to tekststrenger av lik lengde. Programmet skal gi feilmelding i tilfelle fila ikke finnes eller tekststrengene er av ulik lengde. Når filnavn for eksisterende tekstfil og strenger av lik lengde er lest inn, skal programmet lese tekstfila linje for linje og skrive den linjevis til en ny fil. I den nye fila skal hver forekomst av den første tekststrengen (i fila som leses) være byttet ut med den andre tekststrengen. (Dette skal også gjelde for deler av ord, slik at dersom f.eks. tt skal byttes ut med pp, så skal erstatt bli til erstapp.) Den fil som behandles skal fortsatt eksistere uendret etter at programmet er kjørt på den.
Bestem filnavnet for den nye fila slik at den får samme fornavn som den leste fil, men et annet etternavn. For å få generert det nye filnavnet, kan det være nyttig å implementere en egen hjelpemetode
private String nyttFilnavn( String filnavn, String nyttEtternavn ) { ... }Denne skal virke på den måten at dersom vi for eksempel foretar kallet
String utfil = nyttFilnavn( "Test.java", "erstatt" );så vil
utfil
bli lik "Test.erstatt"
.
Ved utføring av erstatningsoperasjonen vil du få bruk for diverse String-metoder. For å finne forekomster av en gitt streng er de forskjellige versjonene av indexOf-metoden nyttige. For å hente ut deler av en streng, bruker du substring-metoden.
Lag applikasjonen i form av et JFrame-vindu der brukerkommunikasjonen foregår og der innholdet i kildefil og erstatt-fil vises i hvert sitt tekstområde når erstatningsoperasjonen er gjennomført.