String-manipulasjon og I/O i Java. INF1000 h14 - Hans Petter Taugbøl Kragset

Like dokumenter
INF1000 Behandling av tekster

INF Notat om I/O i Java

IN Notat om I/O i Java

INF1000-SIKT - Notat om I/O i Java

Løse reelle problemer

TDT4100 Objektorientert programmering

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

Eksamensoppgave i IFUD1025 Programmering i Java

Forkurs INF1010. Dag 3. Andreas Færøvig Olsen Gard Inge Rosvold Institutt for Informatikk, 15.

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

Forkurs INF1010. Dag 1. Andreas Færøvig Olsen Tuva Kristine Thoresen

INF Løsning på seminaropppgaver til uke 8

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

Løse reelle problemer

Hva er verdien til variabelen j etter at følgende kode er utført? int i, j; i = 5; j = 10; while ( i < j ) { i = i + 2; j = j - 1; }

Fakultet for informasjonsteknologi, Institutt for datateknikk og informasjonsvitenskap

Forelesning inf Java 5

Forelesning inf Java 5

INF1010 våren 2019 Onsdag 30. januar. Mer om unntak i Java (med litt repetisjon av I/O først)

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

Fra Python til Java, del 2

Fra Python til Java. En introduksjon til programmeringsspråkenes verden. Dag Langmyhr

INF1010 våren 2018 tirsdag 23. januar

IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr

Eksamensoppgave i IFUD1025 Programmering i Java og IINI4013 Programmering i Java

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

INF1000 (Uke 6) Mer om metoder, tekster

Orakeltjeneste på Abel Hjelp til Obligatorisk oppgave 2. INF1000 (Uke 6) Mer om metoder, tekster. Rep: Metoder. Rep: Metoder

Løsningsforslag til eksamen i INF1000 våren 2006

Forkurs INF1010. Dag 3. Andreas Færøvig Olsen Eivind Storm Aarnæs

Enkel lesing og skriving i Java

INF1000 EKSTRATILBUD. Stoff fra uke 1-5 (6) 3. oktober 2012 Siri Moe Jensen

IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr

INF Uke 11. Ukeoppgaver oktober 2012

INF1010 våren 2017 Onsdag 25. januar. Litt om unntak i Java

Uke 8 Eksamenseksempler + Ilan Villanger om studiestrategier. 11. okt Siri Moe Jensen Inst. for informatikk, UiO

Repetisjon. INF gruppe 13

Blokker og metoder INF1000 (Uke 6) Metoder

Eksamensoppgave i IFUD1025 Programmering i Java

INF1000 (Uke 6) Mer om metoder, tekster

Kapittel 9: Sortering og søking Kort versjon

Rep: Metoder. INF1000 (Uke 6) Mer om metoder, tekster. Rep: Metoder. 3 typer variable: Klassevariable. Java-programmene så langt i kurset:

i=0 Repetisjon: arrayer Forelesning inf Java 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker 0*0 0*2 0*3 0*1 0*4

Forelesning inf Java 4

3 emner i dag! INF1000 Uke 5. Objekter og pekere. null. Litt om objekter, pekere og null Filer og easyio Litt mer om tekster

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

Post-it spørsmål fra timen (Arv og subklasser)

Løsningsforslag ukeoppg. 6: 28. sep - 4. okt (INF Høst 2011)

UNIVERSITETET I OSLO

Å lese tall fra en fil, klassen Scanner

INF1000 Metoder. Marit Nybakken 16. februar 2004

UNIVERSITETET I OSLO

Forkurs INF1010. Dag 2. Andreas Færøvig Olsen Tuva Kristine Thoresen

INF1010 Sortering. Marit Nybakken 1. mars 2004

INF100 Institutt for informatikk Universitetet i Bergen Øving 5

INF Notater. Veronika Heimsbakk 10. juni 2012

Hittil har programmene kommunisert med omverden via tastatur og skjerm Ønskelig at data kan leve fra en kjøring til neste

Obligatorisk oppgave 1 i INF 4130, høsten 2008

Lenkelister. Lister og køer. Kopi av utvalgte sider fra forelesningen.

Lese fra fil. INF1000 : Forelesning 5. Eksempel. De vanligste lesemetodene. Metoder:

Programmering Høst 2017

Ole Christian Lingjærde, 12. september 2013

Forelesning inf Java 4

INF1000 : Forelesning 5

Obligatorisk oppgave 1 i INF 4130, høsten 2009

Eksempel 1 Eksempel 2 Dramatisering. INF1000 uke 3. Sundvollen 7. september 2015 Dag Langmyhr. INF1000 Sundvollen

INF Ekstrainnlevering

INF1000 (Uke 5) Mer om løkker, arrayer og metoder

UNIVERSITETET I OSLO

INF1000: noen avsluttende ord

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

INF 1010, vår 2005 Løsningsforslag uke 11

Innhold. INF1000 Høst Klasser og objekter. Uke 7: Mer objektorientert programmering Siri Moe Jensen

Kapittel 8: Sortering og søking

Jentetreff INF1000 Debugging i Java

Spørsmål fra forrige forelesning. INF1000 Forelesning 7. Oppførselen til inword()/inint()/etc. Operator-presedens i Java

INF1010 Binære søketrær ++

Ta inn og ut av 2D-array. Java 6. Liste over ulike verdier i 2D-array. Det ferdige programmet. Vi skal lage et program som illustrerer hvordan man

programeksempel Et større En større problemstilling Plan for forelesingen Problemstillingen (en tekstfil) inneholdt ordet "TGA"

INF1000 Uke 5. Litt om objekter, filer med easyio, tekst

UNIVERSITETET I OSLO

Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) Løsningsforslag

UNIVERSITETET I OSLO

Løsningsforslag ukeoppg. 5: sep (INF Høst 2011)

Kapittel 9: Sortering og søking Kort versjon

Oversikt. INF1000 Uke 6. Objekter, pekere og null. Lese og skrive fra/til fil. Litt om objekter, pekere og null Filer og easyio. Litt mer om tekster

Eksempel: Body Mass Index (BMI) Forelesning inf Java 3. Ferdig program (første del) Ferdig program (siste del)

UNIVERSITETET I OSLO

Kapittel 3: Bruk av objekter

Kapittel 8: Sortering og søking INF100

Kapittel 8: Sortering og søking INF100

Leksjon 7. Filer og unntak

Oblig 7 - Råd og tips. Henrik Hillestad Løvold

Forelesningsquiz. Forelesning inf Java 5. Sett dere to (eller tre) sammen og besvar de fire spørsmålene på utdelt ark. Tid: 15 min.

Seminaroppgaver IN1010, uke 2

UNIVERSITETET I OSLO

Transkript:

String-manipulasjon og I/O i Java INF1000 h14 - Hans Petter Taugbøl Kragset hpkragse@ifi.uio.no

Plan Viktige metoder i String Repetisjon av I/O Oppgaver og eksempler

Viktige metoder charat compareto[ignorecase] contains endswith equals[ignorecase] indexof lastindexof length isempty replace split startswith substring tochararray to[lower][upper]case trim

Mal for slidene signatur(type argument) forklaring eksempel Spørsmål fasit

String

length int length() Returnerer lengden til Stringen String a = "abcde"; int len = a.length(); Hva er veriden av len? 5

isempty boolean isempty() Returnerer true hvis Stringens lengde er 0 IKKE det samme som NULL String a = ""; boolean b = a.isempty(); Hva er verdien av b? true

charat char charat(int index) Returner char-verdin på en gift indeks Indeks varierer fra 0 til length() - 1 helt tilsvarende array-indeksering String a = "abc"; char b; b = a.charat(2); Hva er verdien av b? 'c'

equals boolean equals(object anobject) Returnerer true dersom dette objektet (this) og objektet anobject inneholder akkurat den samme sekvensen av tegn. Fancy måte å si "True hvis strengene er like" på. String a, b; a = "abcde"; b = "abc de"; boolean c = a.equals(b); Hva er verdien av c? false

equalsignorecase boolean equalsignorecase(string anotherstring) Gjør det samme som equals, men anser 'A' og 'a' for å være like String a, b; a = "AbCde"; b = "abcde"; boolean c = a.equalsignorecase(b); Hva er verdien av c? true

compareto comparetoignorecase int compareto(string anotherstring) int comparetoignorecase(string str) Returnerer en int basert på hvilken String som kommer leksikografisk først. Negativ hvis this kommer før argument-stringen, positiv om det er motsatt, 0 hvis strengene er like (som equals). IgnoreCase anser 'A' og 'a' for å være like String a, b; a = "ape"; b = "ake"; int comp = a.compareto(b); Hva er verdien av comp? (positiv, negativ eller 0?) positiv

mer om compareto Brukes ofte for å sortere Jeg bruker alltid litt tid på å huske om det er større enn 0 eller mindre eller hva det er Pass på hva som sammenlignes med hva a.compareto(b) er jo motsatt av b.compareto(a)

startswith boolean startswith(string prefix) Returnerer true hvis this begynner med prefix. String a, b; a = "abcdefg"; b = "abc"; boolean c = a.startswith(b); Hva er verdien av c? true

endswith boolean endswith(string suffix) Returnerer true hvis this slutter med suffix. String a, b; a = "abcdefg"; b = "abc"; boolean c = a.endswith(b); Hva er verdien av c? false

indexof int indexof(int ch) int indexof(int ch, int fromindex) int indexof(string str) int indexof(string str, int fromindex) Finner posisjonen til en gitt char eller String Hvorfor står det "int ch"? char er en slags int

indexof String a = "abcabc"; char b = 'c'; int i = a.indexof(b); int j = a.indexof("b"); int k = a.indexof("b", 3); Hva er verdien av i, j og k? i = 2 j = 1 k = 4

lastindexof int lastindexof(int ch) int lastindexof(int ch, int fromindex) int lastindexof(string str) int lastindexof(string str, int fromindex) Finner den siste posisjonen til en gitt char eller String

lastindexof String a = "cbcbc";; int i = a.lastindexof("c"); int j = a.lastindexof("cbc"); int k = a.lastindexof("c", 3); Hva er verdien av i, j og k? i = 4 j = 2 k = 2

substring String substring(int beginindex) String substring(int beginindex, int endindex) Returnerer en String som er en del av this. String a = "abcdefgh"; string b = a.substring(4, 6); Hva er verdien av b? "ef"

Mer om substring String substring(int beginindex) Fra og med beginindex, til slutten av Stringen String substring(int beginindex, int endindex) Fra og med beginindex, til og ikke med endindex. Dette gjør at vi kan vite lengden på Stringen a.substring(4, 6); gir en resultatstreng med lengde 2 (4-6).

replace String replace(char oldchar, char newchar) Returnerer en ny String der alle forekomster av charen oldchar er byttet ut med charen newchar. String a = "abcdefg"; String b = a.replace('c', 'x'); Hva er verdien av b? "abxdefg"

Mer om replace String replace(charsequence target, CharSequence replacement) CharSequence er det samme som String Bytter altså ut en substring, og ikke bare en og en char. String a = "abc"; String b = a.replace("b", "kalkun"); Hva er verdien av b? "akalkunc"

contains boolean contains(charsequence s) Returnerer true hvis this inneholder Stringen s. CharSequence er noe rare greier, tenk på det som en String. String a = "abcdefg"; b = "bc"; boolean c = a.contains(b); Hva er verdien av c? true

split String[] split(string regex) Returnerer en String-array Splitter opp this og setter del for del inn i arrayen String a = "ab:cd:ef:g"; String[] b = a.split(":"); Hva er verdien av b? {"ab", "cd", "ef", "g"}

Mer om split String[] split(string regex) Vi kan splitte med hva som helst De som vil kan lese mer om regex for å lære mer om det Mastering Regular Expressions - lån på biblioteket.

tolowercase touppercase String tolowercase() String touppercase() Returnerer en String der alle tegn er store eller små String a, b; a = "abcdefg"; b = "abc"; a = a.touppercase(); b = b.tolowercase(); Hva er verdien av a og b? "ABCDEFG" "abc"

trim String trim() Returnerer en ny String der blanke tegn i starten og på slutten er fjernet String a, b; a = " ab c d "; String b = a.trim(); Hva er verdien av b? "ab c d"

tochararray char[] tochararray() Returnerer en char-array som inneholder alle tegnene fra this. String a = "ab def"; char[] c = a.tochararray(); Hva er verdien av c? {'a', 'b', ' ', 'd', 'e', 'f'}

String som returtype Returnerer et nytt String-objekt f eks: String abc, sub; abc = "abcdefg"; sub = abc.substring(2); sub er nå et nytt String-objekt laget av substringmetoden i String-objektet abc Det er ingen metoder i String som forandrer en String Alle returnerer en ny String!

Fremgangsmåte Hvilke metoder kan funke? Finn den metoden som gjør mest Kombiner metoder Tenk på rekkefølgen! Ta vare på returverdier Tenk på hva som kan gå galt Flere eksempler kommer

I/O

I/O - plan Scanner Fra terminal Fra fil PrintWriter Til fil

Scanner import java.util.scanner; Metodene vi trenger: hasnextline() nextline()

Innlesing fra terminal Scanner sc = new Scanner(System.in); "System.in" er terminalen, der vi leser fra String a = sc.nextline(); a inneholder nå alt som ble skrevet i terminalen til men ikke med linjeskiftet på slutten (Enter) Linjeskiftet forsvinner!

Innlesing av tall Scanner sc = new Scanner(System.in); String a = sc.nextline(); Hva gjør vi for å hente ut tall fra Stringen a? Integer.parseInt(String s) Henter int-verdien ut av en String int b = Integer.parseInt(a); Double.parseDouble(String s); Gjør det samme for komma-tall

Innlesing fra fil import java.util.scanner; import java.io.file; File f = new File("filnavn.txt"); Scanner sc = new Scanner(f); Nå er sc en Scanner som leser fra filen "filnavn.txt" Vi kan bruke følgende metoder: boolean hasnextline() Returnerer true hvis det fins flere linjer igjen i filen Ingenting blir lest String nextline() Leser og returnerer neste linje av filen Vi må huske noe spesielt også: throws Exception

Innlesing fra fil forts. import java.util.scanner; import java.io.file; File f = new File("filnavn.txt"); Scanner sc = new Scanner(f); while(sc.hasnextline()) { System.out.println(sc.nextLine()); }

PrintWriter import java.io.printwriter; Metodene vi trenger: println() print() close()

Utskrift til fil import java.util.printwriter; String a = "filnavn.txt"; PrintWriter pw = new PrintWriter(a); Nå er pw en PrintWriter som skriver til filen "filnavn.txt" For å skrive til fil bruker vi pw.println("srevet til fil"); Hvis vi ikke vil ha med linjeskift på slutten kan vi bruke pw.print("uten linjeskift"); Vi må huske noe spesielt også: throws Exception

Utskrift til fil forts. import java.util.printwriter; String a = "filnavn.txt"; PrintWriter pw = new PrintWriter(a); int i = 0; while(i < 10) { pw.println("verdien til i: " + i); i++; } pw.close();

Eksempel

Eksempel Vi har en fil med et litt rart format, og vi ønsker å plukke ut en del av innholdet. Filen er som følger: HEI _ DIN _ KALKUN_ HVORDAN_ HAR_ DU_ DET _? _JEG_ HAR _ DET_BRA _! Vi ønsker å lese ut setningen som står der, uten alle "_" og ekstra mellomrom. Hva kan vi gjøre?

1. Hvilke metoder kan funke? 2. Finn den metoden som gjør mest 3. Kombiner metoder 4. Tenk på rekkefølgen! Eksempel HEI _ DIN _ KALKUN_ HVORDAN_ HAR_ DU_ DET _? _JEG_ HAR _ DET_BRA _! substring, split, indexof, lastindexof, tochararray. (mer?) split("_"); Da har vi en array med ord, men mellomrommene er der enda trim(); Fullstendig kode på neste slide

import java.util.printwriter; import java.util.scanner; import java.io.file; public class StringManip { public static void main(string[] args) { Scanner sc = new Scanner(new File("filnavn.txt")); String tekst = sc.nextline(); String[] ord = tekst.split("_"); String setning; for(int i = 0; i < ord.length; i++) { setning += ord[i].trim() + " "; } PrintWriter pw = new PrintWriter("filnavn.txt"); pw.println(setning); pw.close(); } } Output: $> HEI DIN KALKUN HVORDAN HAR DU DET? JEG HAR DET BRA! Spørsmål?

Andre løsningsforslag? Fra salen? Vi kunne brukt andre fremgangsmåter! Eksempel: int ind1 = indexof('_'); ord[i] = line.substring(0, ind1); ord[i] = ord[i].trim(); line = line.substring(ind1 + 1); Dette kan gå i løkke Bruk kreativiteten deres!

Oppgaver!!! Hvis du leser dette på nettet skal det ligge en fil "Repkurs-oppgaver.pdf" ved siden av som inneholder oppgaver. Hvis ikke, send mail (se første slide).