Grundläggande stränghantering

Relevanta dokument
[] Arrayer = Indexerad variabel

Lektion 1, del b Utskrifter av variabelvärden Inläsning av värden till variabler

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)

Lektion 1 Introduktion till DrJava och Java

Objekt som argument. Föreläsning 7-8 Innehåll. Hur komma åt den andra kvadratens attribut? Anropa metod på objektet självt

Föreläsning 7-8 Innehåll

Föreläsning 3: Typomvandling, villkor och val, samt textsträngar

Lektion 6. Datateknik A, Java I, 5 poäng

Lösningsförslag: Instuderingsfrågor, del D

Föreläsning 10 OM DELMÅLSKONTROLLEN ; VARIABLERS SYNLIGHET STRING OCH STRINGBUILDER

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Objektorienterad programmering. Fält som funktionsresultat. Mer om fält: att uppdatera ett parameterfält. Kontrast: Parametrar av primitiv typ

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy cards. Slingor

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning

I ett program hantera man ofta samlingar av objekt av samma typ.

Föreläsning 3-4 Innehåll

TENTAMEN OOP

Tentamen OOP

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Om att lära sig programmera. Föreläsning 1-2 Innehåll.

Datastrukturer. Föreläsning Innehåll. Program med vektor Exempel. Deklarera vektorer

Lösningsförslag: Instuderingsfrågor, del A

F2 Datatyper och variabler. ID1004 Objektorienterad programmering Fredrik Kilander

Föreläsning 3. Iteration while-satsen

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering.

EDAA20 Föreläsning Klassen ArrayList. Viktiga operationer på ArrayList. Generisk klass

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

Programstruktur och terminologi. Programmet producerar följande utskrift i terminalfönstret: Ett Javaprogram består av en eller flera klasser

OOP Objekt-orienterad programmering

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Föreläsning 2. Täcker material från lektion 1, 2, 3 och 4:

LÖSNINGSFÖRSLAG TENTAMEN

Föreläsning 8 SLUMPTAL, SIMULERING + INTRODUKTION TILL VEKTORER

Iteration while-satsen

Föreläsning 3. Iteration. while-satsen for-satsen do-satsen

Föreläsning 9-10 Innehåll

System.out.println("Jaså du har "+ antaldollar + " stycken.");

1 Uppgift 1. a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna.

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

PROGRAMMERING-Java Omtentamina

Tentamen i Grundläggande Programvaruutveckling, TDA548

Hur ser ett Java-program ut?

OOP Objekt-orienterad programmering

Typkonvertering. Java versus C

Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser.

Chapter 3: Using Classes and Objects

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Textsträngar och formulär i JavaScript

JAVAUTVECKLING LEKTION 4

OOP Objekt-orienterad programmering

2D1311 Programmeringsteknik för Bio1 och Bio2, vt 2003 Fiktivt prov På flervalsfrågorna är endast ett svar rätt om inget annat anges i frågan! Det rik

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

System.out.println("Jaså du har "+ antalhusdjur+ " husdjur"); if ( antalhusdjur > 5 ) System.out.println("Oj det var många);

Objektorienterad programmering

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser

Iteration. Föreläsning 3. TDA540 - Objektorienterad Programmering

String [] argv. Dagens Agenda. Mer om arrayer. Mer om arrayer forts. String [] argv. argv är variabelnamnet. Arrayer och Strängar fortsättning

Föreläsning 5-6 Innehåll

Föreläsning 11. Arrayer. Arrayer. Arrayer. Lagrar flera värden av samma typ Kan vara primitiva typer eller objekt. Kan ha en array av t.

Tentamen. Datalogi I, grundkurs med Java 10p, 2D4112, Lördagen den 30 november 2002 kl , salar E33, E34

public och private Obs: private inte skyddar mot access från andra objekt i samma klass.

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

Datastrukturer. Erik Forslin. Rum 1445, plan 4 på Nada

DD1342 Programkonstruktion för F1,

JAVA Mer om klasser och objektorientering

TDIU01 - Programmering i C++, grundkurs

Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser.

Uppgiften är att beskriva en kvadrat i ett Java program. En första version av programmet skulle kunna se ut så här:

F4. programmeringsteknik och Matlab

Lösningsförslag, tentamen FYTA11 Javaprogrammering

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Strukturdiagram. Styra. Algoritmer. Val

Användarhandledning Version 1.2

Objektorienterad programmering Föreläsning 9. Copyright Mahmud Al Hakim Agenda (halvdag)

Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga)

5. En metod som anropar sig själv a) får inte förekomma i Java-program b) kallas destruktiv c) kallas iterativ d) kallas rekursiv 6. Vilka värden har

För att skriva data till skärmen ( konsolen) används objektet System.out tillsammans med metoden println eller print.

PROGRAMMERING-Java TENTAMINA

Sammanfattning och repetition utgående från typiska tentamensuppgifter

Skriftlig tentamen för kursen DV017A. Inledande programmering i Java A

Objekt-orientering. Java är ett objekt-orienterat programmeringsspråk

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

Dagens föreläsning. Arrayer och klasser. Medan ni väntar: Gå till m.voto.se/prog11 och svara på några gamla tentamensfrågor! (26 januari 2018 F3 1 )

Övning från förra gången: readword

Föreläsning 4. Klass. Klassdeklaration. Klasser Och Objekt

Övningar i JavaScript del 4

Outline. For. I istället för att följa det normala ordningen, man ändra den. I i Java får man inte göra hopp hur som helst

Instuderingsfrågor, del D

Dagens föreläsning. Sett i datorsalarna. Mer om arrayer. Matriser. Formatering av utskrifter. Inläsning med hjälp av Scanner-klassen

JAVAUTVECKLING LEKTION 3

Objektorienterad programmering i Java

C++ Lektion Tecken och teckenfält

Objekt och referenser

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Exempelduggan. Luffarschack. Koda spel

Lösningsförslag till tentamen

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt

Java, klasser, objekt (Skansholm: Kapitel 2)

Föreläsning REPETITION & EXTENTA

Programmeringsteknik och Matlab. Dagens program. Viktiga datum. Repetitionsexempel. Repetition av if/else, for, while och Scanner

Transkript:

Grundläggande En sträng är en sekvens av tecken (text). t) För att ange ett strängvärde omgärdar man det med dubbelfnuttar: Exempel på strängvärden: "Ångström" "1256" "ABC123" Man kan slå ihop strängar, det kallas för konkatenering. k Operatorn plus (+) gör konkatenering: k "Polack" + "sbacken" blir strängvärdet "Polacksbacken" "1256" + "78" blir strängvärdet "125678" 1

Strängvariabler (klassen String) I en strängvariabel kan man lagra strängvärden. Exempel, vi deklarerar och initierar två strängvariabler: String s = "Lena"; String t = "Bo Ek"; Teknen i en sträng är lagrade på varsitt index (position) s består av 4 tecken, det finns därför 4 olika index Index 0 i s har teckenvärdet 'L' Index 1 i s har teckenvärdet 'e' Ett blanktecken (mellanslag) på Index 2 i s har teckenvärdet 'n' index 2 Index 3 i s har teckenvärdet 'a' Index 0-4 i t har värdena 'B','o',' ','E','k'. Hur man kommer åt de enskilda tecknen i en sträng kommer ni se alldeles strax 2

Javasatser String s = "Lena"; String t = "Bo Ek"; Strängvariabler I datorns minne lagras tecknen i en sekvens. Eftersom varje tecken i Java kräver två byte behövs 8 byte för "Lena" s 'L' 'e' 'n' 'a' t 'B 'o' ' ' 'E' 'k' I minnet lagras information om innehållet i strängen 3

Vi fortsätter exemplet String s1 = "Lena"; String s2 = "Bo Ek"; String adress = " Skolgatan 33"; String s3, s4; //2 nya strängar får värdet null s3 = s1 + adress; // s3 tilldelas värde s3 får värdet "Lena Skolgatan 33"; s4 = s1 + "-" + s2; s4 får värdet "Lena-Bo Ek"; + mellan strängar betyder s.k. konkatenering, dvs hopkedjning 4

Eftersom String är en klass finns det Metoder för strängar Längden av en sträng int len = s3.length(); Tag reda på ett tecken i ett givet index (4) char t = s3.charat(5); Gör om alla tecken till versaler s3 = s3.touppercase(); 2. Vänsterledet säger att s3 skall tilldelas ett värde som finns i högerledet. Dvs s3 innehåller samma tecken som tidigare, men alla gemener ändras till versaler.. t får värdet 'S' S 1. Java gör högerledet först: Omvandla alla gemener i strängen tä s3 till versaler 5

Inläsning av strängar Givet att vi gjort: Scanner input = new Scanner(System.in) kan vi läsa in en hel rad med text t med nextline via Interactions: String namn1, namn2; System.out.println("Namn?"); namn1 = input.nextline(); // Läser hela raden Eller läsa in text ordvis med next: System.out.println("Namn?"); namn2 = input.next(); // Läser ett ord Med Popup kan man läsa in en hel rad med text: Om texten består av t.ex. blanka tecken, så avgränsas ord av dessa blanka. String namn; namn = JOptionPane.showInputDialog(null,"Namn?"); 6

Eftersom String är en klass har den en konstruktor Ett exempel: String s1 = new String("Torsten"); String s2 = new String("Torstina"); Java har förenklat det lite genom att ovan är ekvivalent med följande: String s1 = "Torsten"; String s2 = "Torstina"; Varje gång vi tilldelar ett nytt värde till en String-variabel innebär alltså ett nytt objekt skapas med konstruktorn. s1 = "Kim"; // Anropa konstruktorn Detta innebär att referensen till det förra objektet tappas bort. s1 refererar nu till ett nytt objekt. 7

String s1 = "Torsten"; String s2 = "Torstina"; Att jämföra strängar if (s1==s2) { } Innebär att referenserna jämförs, vilket normalt alltid blir false. Jämförelser kan göras med följande metoder: s1.equals(s2) s1.compareto(s2) 8

Konvertering från tal till String Genom konkatenering int x=12; String s = "x är " + x; s blir därmed "x är 12" Med klassmetoden valueof i klassen String: int x=12; String s = String.valueOf(x); s blir därmed "12" Med klassmetoden format i klassen String: double y=4.3569999; String s = String.format("%7.2f", y); S blir därmed " 4.36" s består av 7 tecken och talet avrundas till två decimaler Klassmetod är en metod som man anropar genom att ange klassen namn, mer om det på annan plats, jämför med anrop av metoder i klassen Math. 9

Konvertering från String till tal Kan göras med hjälp av parsemetoderna: String s = "2.5"; double d = Double.parseDouble(s); s = "kim 22 år"; double b = Double.parseDouble(s); Blir naturligtvis fel Kan göras med Scannerklassen String s = "13 3,5 12 Pia"; Scanner sc = new Scanner(s); int x =sc.nextint(); // x blir 13 double y = sc.nextdouble(); // y blir 3.5 int z = sc.nextint(); // z blir 12 String s = sc.next(); // S blir "Pia" 10

Metoder på strängar Alla metoder för strängvariabler finns dokumenterade här: http://docs.oracle.com/javase/7/docs/api/java/lang/string.html 11

Övningar på strängar (utförs enklast i Interactions) Övn 1. Testa följande: String s1="abba"; String s2="bbba"; Testa följande sats, skriv ut värdet på tal int tal = s1.compareto(s2); Testa med: tal = s2.compareto(s1); // Vad blir tal? Och s2="abba"; tal = s1.compareto(s2); Enklast gör du en utskrift av en variabels värde genom att bara skriva variabelns namn på en tom rad följt av ENTER. Och s2="abba"; tal = s1.compareto(s2); // Vad blir tal? Vad tror ni att compareto beräknar? 12

Övn 2 (utförs enklast i Interactions) String s1="abba"; String s2="abba"; Skriv ut värdet på resultat boolean resultat t = s1.equals(s2); // Vad blir resultat? t? resultat = s2.equals(s1); // Vad blir resultat? Testa med: s2="acba"; resultat = s1.equals(s2); // Vad blir resultat? Testa med: s2="abba"; resultat = s1.equals(s2); // Vad blir resultat? Kuriosa: Att jämföra strängvariabler med == fungerar INTE. Testa med logiskt uttryck: boolean lika = s1==s2; Värdet blir alltid false. Det beror på att s1 är en referensvariabel och samma sak för s2, och dessa värden är inte lika (dvs referenserna är inte lika). Vad tror ni att equals beräknar? Vad är skillnaden mellan compareto och equals? 13

Övn 3 (utförs enklast i Interactions) : Testa följande: String ramsa = "Sex laxar i en laxask"; String s; s=ramsa.substring(4,7); Vad blir värdet av s? Testa att använda substring på lite andra sätt genom att variera parametervärdena (inom parentesen) Hur tror ni att substring fungerar? Testa följande: int i; i=ramsa.indexof("s"); i=ramsa.indexof("lax"); i=ramsa.indexof("gädda"); Hur tror ni att indexof fungerar? Man kan även använda indexof med två st parametrar. Exempel: String s2="bla etc bla bla"; int j=s2.indexof("bla",4); Kommer att leta efter "bla" från position 4. j får värdet 8. Fundera på (men skriv inga javasatser) hur man skulle kunna ta reda på hur många ggr som lax förekommer i texten. 14

Övn 4 (utförs enklast i Interactions) Testa följande: String ramsa = "Sex laxar i en laxask"; ramsa = ramsa.replacefirst("x","xtio"); ramsa = ramsa.replaceall("lax","mört"); Vad blir värdet av ramsa? Hur tror ni replacefirst och replaceall fungerar? 15

Övn 5 - Ja/Nej konversation (utförs enklast i Interactions) Läs igenom koden och testa sedan följande: import java.util.*; Scanner input = new Scanner (System.in); System.out.println("Svara Ja eller Nej"); String svar = input.nextline(); if (svar.equals("ja")) { System.out.println("Du svarade Ja"); } else if (svar.equals("nej")) { System.out.println("Du svarade Nej"); } else { System.out.println("Du svarade varken Ja eller Nej"); } 16

Övn 6 - Alt Ja/Nej konversation (utförs enklast i Interactions) Läs igenom koden och testa sedan: import java.util.*; Scanner input = new Scanner (System.in); System.out.println("Svara t tl Ja eller Nej"); String svar = input.nextline(); // Plocka ut 1:a tecknet från svar char c = svar.charat(0); if (c=='j') { System.out.println("Du t tl svarade Ja!"); } else if (c=='n'){ System.out.println("Du svarade Nej!"); } else { System.out.println("Du svarade varken Ja eller Nej"); } 17

Övn 7: Bygg upp en sträng teckenvis (utförs enklast i Interactions) String s = ""; // Börja med en tom sträng Skapa ett slumptecken char slump; // Tecknet får värdet 'A' - 'Z' // Fråga läraren om det är oklart med nedan sats slump = (char) ('A' + (int) (26*Math.random()) ); Bygg på strängen med slumptecknet s = s + slump; Vad blir värdet av s? Bör bli bara ett tecken Fortsätt nu med följande två satser (tips: använd uppåtpil för att repetera satser) : slump = (char) ('A' + (int) (26*Math.random()) ); s = s + slump; Upprepa de två satserna några ggr Och skriv ut värdet av s. 18

Övn 8: Lagra en uppsats i en Sträng (utförs enklast i Interactions) En text kan lagras i en String-variabel. I variabeln finns radbytena med genom att vi lagrar specialtecknet \n. Exempel: String visa = "Imse vimse... \n Ned... \n Upp...\n Imse...\n"; Lägg in hela satsen ovan i DrJava. Skriv ut variabeln visa. Visst kom radbytena med Man kan även få med TAB-tecken i en text. Skriver då: \t 19

Övning 9 kryptering (utförs enklast i Interactions) Vi skall kryptera strängen s som är "Pia". Läs först igenom följande satser och försök förstå vad de gör. Klistra sedan in alla satserna i DrJava och bekräfta att det fungerar och att resultatet s2 blir Qjb, dvs Pia krypteras till Qjb String s = "Pia"; String s2 = ""; // s2 är tom initialt char teck; // Behöver en teckenvariabel teck = s.charat(0); // 1:a tecknet i s (P) lagras i teck teck++; //addera 1, dvs ändra P till Q, en trivial kryptering s2 = s2 + teck; // s2 blir "Q" teck = s.charat(1); // 2:a tecknet teck++; // ändra 2:a tecknetet s2 = s2 + teck; // s2 är nu "Qj" teck = s.charat(2); // 3:e tecknet teck++; // ändra s2 = s2 + teck; // s2 är nu "Qjb" 20

Övning 10 - Loopa igenom en sträng (utförs enklast i Interactions) Eftersom vi vet hur lång en sträng är mha metoden length() kan vi skapa en loop som går igenom tecken för tecken i en sträng. Här är ett exempel som går igenom en sträng och räknar antalet bokstäver som är ett 'a'' (gemener). String s = "Torsten Andersson"; char ch; int antal=0; // Räknare för antal 'a'' // Loopa igenom strängen s från position 0 till // positionen som är strängens längd minus 1 for (int i=0; i<s.length(); i++) { ch = s.charat(i); //plocka ut tecknet på pos i if (ch=='a') {// Om tecknet är a, uppdatera räknaren antal++; } } System.out.println("Antal a är:"+ antal); Klistra in dessa satser i Interactions och tryck på enter så kommer alla satser att utföras. 21

Övning 11 - kryptering mha loop (utförs enklast i Interactions) Det blir enklare att lösa krypteringen (från Övn 9) med en loop som går igenom tecken för tecken i strängen String s = "Pia ", s2 = ""; char ch; // tecken i strängen // loopa igenom strängen, tecken för tecken for (int i=0; i<s.length(); i++ ) { ch = s.charat(i); //plocka ut tecknet på pos i ch++; // kryptera tecknet s2 = s2 + ch; // bygg upp resultatet } System.out.println("Krypterad:"+ s2); Klistra in dessa satser i Interactions och tryck på enter så kommer alla satser att utföras. Resultatet bör bli att strängen "Pia " bör bli "Qjb!. Blanktecknet blir ett utropstecken. 22

Övning 12: Exempel på analys av text: Räkna ord i en uppsats (finns i t.ex. Word). Fundera på hur man skulle kunna räkna ord i en sträng. Skriv inga satser bara fundera ut en princip i (algoritm) Läsbarhetsindex (LIX) är ett mått som är baserat på medeltalet ord per mening och andelen långa ord (ord med fler än 6 bokstäver) Nyfiken på detta? Läs mer om LIX på http://sv.wikipedia.org/wiki/lix Testa att utföra en beräkning av LIX för en godtycklig text via en LIX-kalkylator: http://www.lix.se/ 23