INF1000 Behandling av tekster Marit Nybakken marnybak@ifi.uio.no 23. februar 2004 Tekster Vi kommer nesten aldri utenom å bruke tekststrenger i programmene våre, ikke minst fordi det nesten alltid skal gies en utskrift til brukeren. Vi har tidligere sett hvordan man kan skjøte sammen tekster: String a = toblerone ; String b = kommer i så mange farger ; String c = a+b; Og hvordan man kan sjekke om to tekster er like String a = tomatsuppe, b = potetsuppe ; if(a.equals(b)) System.out.println( Suppene våre er like! ); Vi har til nå sett på en String som en variabel, men den er faktisk litt mer enn det. En String er et objekt av en klasse String. Dette betyr at den inneholder mer enn bare teksten vi la inn i den. Enhver String vi lager oss inneholder også metoder for å gjøre ting med teksten. Et eksempel på en slik metode er equals. Når vi sier a.equals( en tekst ), kaller vi på en metode som ligger 1
inni stringen a. Vi har mange flere slike fine metoder som befinner seg inni String-objektene. Disse kan man kalle på med minstring.metodenavn(). De returnerer resultater, ofte en ny String eller et tall, som vi kan fange opp. Her er et lite utvalg av String-metoder: charat : Plukker ut og returnerer en bokstav av stringen. Bruk stringenmin.charat(indeks); Første bokstav i stringen har indeks 0, andre bokstav har indeks 1, siste har indeks stringenmin.length()-1. substring : Plukker ut og returnerer en del av en string. Bruk stringenmin.substring(startindeks, sluttindeks). Bokstaven som ligger på sluttindeks blir ikke med. equals : Sammenligner stringen med en annen string. Bruk stringenmin.equals(denandrestringen). Returnerer true hvis de er like, false hvis de ikke er like. indexof : Finner og returnerer indeksen til første forekomst av en bokstav eller en string i stringen. Bruk stringenmin.indexof(minchar) eller stringenmin.indexof(enannenstring). Hvis bokstaven eller teksten ikke forekom i teksten, returneres -1. length : returnerer antall bokstaver i stringen. Bruk stringenmin.length(). tolowercase : konverterer alle bokstaver i stringen til små bokstaver og returnerer den nye stringen med bare små bokstaver. Bruk stringenmin.tolowercase(). touppercase : konverterer alle bokstavene i stringen til store bokstaver og returnerer den nye stringen bestående av store bokstaver. Merk: disse to metodene endrer ikke selve stringen, men returnerer en ny string. trim : fjerner blanke tegn (mellomrom, tab, linjeskift) foran og bak stringen. Bruk stringenmin.trim(). Her følger noen eksempler på bruk. Legg merke til hvordan vi kaller metoden i stringen og fanger opp returverdien ved å sette en variabel lik kallet på metoden. String s1 = "KjøttØks "; char c1 = s1.charat(2); // c1 = ø 2
String sub = s1.substring(0,5); // sub = "Kjøtt" boolean lik = s1.equals("orangutang"); // lik = false; int ind = s1.indexof( s ); // ind = 7 int ind2 = s1.indexof( hest ); // ind = -1 (finnes ikke) int lengde = s1.length(); // lengde = 9 String liten = s1.tolowercase(); // liten = "kjøttøks " String stor = s1.touppercase(); // stor = "KJØTTØKS " String trim = s1.trim(); // trim = "KjøttØks" StringTokenizer StringTokenizer brukes når vi har en tekst som skal deles opp i mindre deler og vi har et bestemt skilletegn som skiller mellom de ulike delene. De ulike delene som plukkes ut kalles for tokens. Kanskje vi har lyst til å plukke ut ordene som befinner seg i en tekst. Da sier vi til StringTokenizer at skilletegnet er mellomrom og linjeskift. Skal vi dele opp teksten i setninger, setter vi skilletegnet til punktum. Vi lager oss en StringTokenizer ved å skrive StringTokenizer st = new StringTokenizer(minstring, skilletegn ); Den første parameteren er teksten som skal deles opp, den andre parameteren angir hvilke tegn vi skal skille på, og er frivillig. Sender vi ikke med noen parameter, brukes mellomrom, linjeskift og tab som skilletegn. F.eks. String tekst = Jeg gikk en tur på stien, og følte skogens ro ; // Del i to, skill på komma StringTokenizer tok = new StringTokenizer(tekst,, ); Nå kan vi hente ut de to delene på følgende måte: String del1 = tok.nexttoken(); // Jeg gikk en tur på stien String del2 = tok.nexttoken(); // og følte skogens ro Et siste eksempel, skriv ut et alfabet som på mystisk måte har fått rare tegn 3
inni seg String alfabet = "abcdefg#hijklmno#pqrstuvw#xyzæøå"; // Fjern #-tegnene StringTokenizer st = new StringTokenizer(alfabet, "#"); // så lenge det finnes flere tokens, i alfabetstringen, fortsetter // vi å skrive dem ut while(st.hasmoretokens()) { String t = st.nexttoken(); System.out.print(t); } Ofte er det andre metoder i String-klassen som fungerer bedre til formålet enn det StringTokenizer gjør. Bruk med måte. Argumenter fra kommandolinja public static void main(string[]args) Hva betyr String[]args? Jo, nå har vi lært såpass mye om metoder at vi vet at det er en parameter til main, og at det er en String-array som heter args. Vi kaller jo aldri på main, hvor kommer denne arrayen fra? Vanligvis har vi startet et program ved å skrive java MittProgram Men vi kan skrive flere ting etter MittProgram, f.eks. java MittProgram 23 2.19 Torsk med blåbærfyll Gjør vi det, vil arrayen args inneholde 5 elementer args[0] : 23 args[1] : 2.19 args[2] : Torsk args[3] : med 4
args[4] : blåbærfyll Disse verdiene kan vi bruke videre i programmet vårt. Vi kan definere det slik at programmet vårt skal ta ett argument fra kommandolinjen, f.eks. hvor mange ganger en tekst skal skrives ut på skjermen. Når programmet starter plukker vi ut denne verdien ut av args[0] og bruker den til å bestemme hvor mange ganger en løkke skal gå. Vi ser at også tallene lagres som Stringer i args-arrayen. Hvis vi skal bruke dem som tall, heltall eller flyttall, er vi nødt til å konvertere dem fra tekst til tall først. Heltall kan konverteres slik: int heltall = Integer.parseInt(args[0]); og flyttall slik: double flyttall = Double.parseDouble(args[0]); 5