Tecken och strängar i Java

Relevanta dokument
Tecken och strängar i Java

Tecken och strängar i Java

TDDD78, TDDE30, 729A Tecken och strängar med och utan Java

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

TDDD78 Viktiga begrepp, del 2

Strängar. TDDD64 Programmering i Python Föreläsning 4. Peter Dalenius Institutionen för datavetenskap

Variabler, värden och typer

OOP Objekt-orienterad programmering

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

F3 Datarepresentation teckenkodning och datakompression EDAA05 Datorer i system! Roger Henriksson!

F3 Datarepresentation teckenkodning och datakompression

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

Tentamen i Grundläggande Programvaruutveckling, TDA548

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

Tentamen OOP

TDDD78 Objektorientering i Java, del 4. Hur vet man om två objekt är lika? Hur undviker man objekt och när?

Att skriva till och läsa från terminalfönstret

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

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

Introduktion till Datalogi DD1339. Föreläsning 2 22 sept 2014

Föreläsning 7-8 Innehåll

TENTAMEN OOP

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-16, TDA540. Dag: , Tid:

Classes och Interfaces, Objects och References, Initialization

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

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

SMD 134 Objektorienterad programmering

Exempel på listor (klassen ArrayList). Ett exempel med fält. Avbildning är en speciell typ av lista HashMap.

TENTAMEN OOP

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Tentamen i Grundläggande Programvaruutveckling, TDA548

Objektorienterad Programkonstruktion

Påminnelse: en datatyp för bilder. Programmering. En datatyp för bilder. Spegelbild. hh.se/db2004

F2 Datatyper och variabler. ID1004 Objektorienterad programmering Fredrik Kilander

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

F2 Datarepresentation talbaser, dataformat och teckenkodning

Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

Exempel. Arrayer. Lösningen. Ett problem. Arrayer och hakparanteser. Arrayer

Saker du ska kunna Föreläsning 13 & 14

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

Programmering i C++ EDAF hp. EDAF30 (Föreläsning 2) HT / 18

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

Parameteröverföring. Exempel. Exempel. Metodkropp

Inkapsling tumregler. Åtkomstmodifikatorer, instantiering, referenser, identitet och ekvivalens, samt klassvariabler. public och private

Tecken. char. char ch = A ; sizeof(char) = 1 byte (ej 16-bitars tecken som i Java) char namn[]= "Nils"; // längd = 5 bytes

Föreläsning 8: Exempel och problemlösning

Föreläsning 5&6 LOGISKA VARIABLER; IMPLEMENTERA KLASSER; MER ALGORITMER

Ett problem. Kontrollstrukturer och arrayer. Arrayer. Lösningen. Arrayer och hakparanteser. Exempel int[] results; results = new int[10]; // 0..

Klassdeklaration. Metoddeklaration. Parameteröverföring

(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

Laboration A Objektsamlingar

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

F2 Datarepresentation talbaser, dataformat och teckenkodning EDAA05 Datorer i system! Roger Henriksson!

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander

Datatyper. Programmering. Att definiera datatyper i Java. Laddade partiklar. (x,y) (Rx,Ry) hh.se/db2004

Språkkonventioner och redigering av tal.

Objektorienterad programmering i Java

Föreläsning 12: Exempel och problemlösning

JAVAUTVECKLING LEKTION 7

Föreläsning 3: Booleans, if, switch

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Lösningsförslag tentamen FYTA11 Java

TDDC77 Objektorienterad Programmering

Digitalitet. Kontinuerlig. Direkt proportionerlig mot källan. Ex. sprittermometer. Elektrisk signal som representerar ljud.

2203$( Föreläsning ii - Mer om Java bla this och konstruktorer. Exempel: lampa

Klasser i Java kan ha metoder och egenskaper. Metoder beskriver funktioner som klassen kan utföra. Egenskaper beskriver innehållet i klassen.

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Typkonvertering. Java versus C

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

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

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten?

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

TDDE10 TDDE11, 725G90/1. Objektorienterad programmering i Java, Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU

PROGRAMMERING-Java Omtentamina

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

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

Den som bara har en hammare tror att alla problem är spikar

Kapitel 6. Hakparenteser fšr att ange index MŒnga všrden av samma typ

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

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

TDDC30. Kursledning Kursledare: Jonas Lindgren. Labassistent: Jonas Lindgren Labassistent: Niklas Holma Labassistent: Erik Nilsson

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

Föreläsning 1 Datastrukturer (DAT037)

TENTAMEN OOP

Undantag. Engelska: exceptions. Skansholm: exceptionella händelser

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten?

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

Del A (obligatorisk för alla)

DAT043 Objektorienterad programmering för D, DIT011 Objektorienterad programvaruutveckling för GU

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

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 sept 05 (Onsdag v 36). DD Chapter 2.

Del A (obligatorisk för alla)

Parsing med Recursive Descent, Avbildningsklasser. Syntaxdiagram. Syntaxdiagram och kodning expression. Betrakta följande uttryck

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

Idag. statiska metoder och variabler. private/public/protected. final, abstrakta klasser, gränssnitt, delegering. wrapper classes

TDDD78 Introduktion till OOP i Java

Transkript:

jonas.kvarnstrom@liu.se 2015 Tecken och strängar i Java

Begrepp: Tecken, kodpunkter, kodningar, Unicode: A till Z och mer

Tecken Steg 1: Ett tecken (en symbol) Odelbar symbol Minsta enheten för information A B C D # "! ( ) å ä ö ċ õ ĕ ķ Ħ Ŗ ǽ Ґ ы Ω Ą Ж ΐ ਈ ਉ ਊ ਏ ਓ ਔ ਕ ਖ ਗ ਘ ਛ R M ریال 略 X 3

Teckenrepertoar 4 Steg 2: En teckenreportoar (character repertoire) Välj ut en bestämd (men inte ordnad) mängd av tillgängliga tecken w 0 M a p N! o. D b ] y 8 C L z 5 h G ( V [ c v P \ U : 7 m ; < 4 S = 2 I J _ A 1 % g F ~ R H + e & d B n s # f { k l * @ / i O ` W r > X ) 6 Q x 9 u t - K 3, T j q E? $ Y ^ Z

5 Steg 3: En kodad teckenuppsättning (coded character set, CCS) Varje tecken motsvaras av ett heltal exempel: ASCII från 0 till 127 Kodad teckenuppsättning

Kodad teckenuppsättning (2) 6 Annat exempel: ISO Latin-x ISO Latin-1: Adderar 32 kontrolltecken, 96 symboler (västeuropa) ISO Latin-2: Adderar 32 kontrolltecken, 96 symboler (östra/centraleuropa)

Kodad teckenuppsättning (3) 7 EBCDIC (IBM-stordatorer): 129 = a, 130 = b,, 137 = i, 145 = j,

Kodad teckenuppsättning (4) 8 Java 8 använder Unicode 6.2.0 https://vimeo.com/48858289 1,114,112 kodpunkter, 0 hex till 10FFFF hex 109,242 grafiska (synliga) tecken! 0000..00FF Som i ISO Latin-1 03D0..03D6 05B0..05B9 GREEK BETA SYMBOL..GREEK PI SYMBOL HEBREW POINT SHEVA..HEBREW POINT HOLAM 0A01 GURMUKHI SIGN ADAK BINDI ਈਉਊਏਓਔਕਖਗਘਛ 0EDC..0EDD LAO HO NO..LAO HO MO ໜໝༀ 2302..237A 2623 2E80..2E99 33E0 1039F 100000.. 10FFFD HOUSE..APL FUNCT. SYMBOL ALPHA BIOHAZARD CJK RADICAL REPEAT..CJK RADICAL RAP IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE UGARITIC WORD DIVIDER <private-use-100000>..<private-use-10fffd>

Teckenkodning Steg 4: Character encoding form + character encoding scheme Ungefär: Hur representerar man dessa tal som bytes i en dator? 9 ISO Latin-1: Värden 0-255 Får plats i en enda byte Trivialt

Teckenkodning (2) Unicode: >100000 tecken Räcker inte ens med 2 bytes (16 bitar) 10 Enkel representation: UTF-32 Tecken 32-bitars heltal Oftast ineffektivt Exempel: Räksmörgås 00 00 00 52 00 00 00 E4 00 00 00 6B 00 00 00 73 00 00 00 6D 00 00 00 F6 00 00 00 72 00 00 00 67 00 00 00 E5 00 00 00 73

Teckenkodning (3) 11 UTF-8: Varierande antal bytes per tecken! Räksmörgås 72 c3 a4 6b 73 6d c3 b6 72 67 c3 a5 73 (hexadecimalt) 13 bytes Ganska effektivt för engelska och liknande språk I ISO Latin-1 skulle dessa 13 bytes betyda "rã ksmã rgã s" Kodningsschema: Teckennummer Lagring som bytes 00000-0007F 00080-007FF 00800-0FFFF 10000 FFFFF 0xxxxxxx (samma som ASCII!) 110xxxxx 10xxxxxx 1110xxxx 10xxxxxx 10xxxxxx 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx Informativt bitmönster!

Tecken och strängar Java skiljer på: 13 Tecken Exakt en symbol Inom apostrofer: x Primitiv datatyp, char Strängar Noll eller flera symboler Inom citat: "Hello World" Objekttyp, java.lang.string

Tecken i Java Datatypen char: 16 bitar, Unicode-tecken 0 65535 char c = 'x'; char c = 120; // c=='x', eftersom Unicodetecken #120 är ett 'x'. 14 Escapekoder för "oskrivbara tecken" '\nnn': '\unnnn': Tecken med oktalt värde nnn ('\012' == tecken 10 = line feed) Tecken med hex-värde nnnn ('\u03d0' == grekiskt beta) '\b': Backspace (ASCII 8) '\t': Tab (ASCII 9) '\n': Newline (ASCII 10) '\f': Form feed (ASCII 12) '\r': Carriage return (ASCII 13) '\'': Apostrof '\\': Backslash

Strängar 1: Exempel 15 Index börjar på 0 Python >>> s = "Spamalot" >>> s[1] 'p' >>> s[-2] 'o' >>> len(s) 8 >>> s[len(s)-1] 't' Java String s = "Spamalot ; s.charat(1) s.charat(s.length() 2) s.length() s.charat(s.length() 1)

Strängar 2: Exempel 16 Ta ut delsträngar Python >>> s = 'Spamalot' >>> s[1:] 'pamalot' >>> s[1:3] 'pa' >>> s[:5] 'Spama' >>> s[:-1] 'Spamalo' >>> s[:] 'Spamalot' Java String s = "Spamalot ; s.substring(1) s.substring(1,3) s.substring(0,5) s.substring(0, s.length() 1) s

Strängar 3: Exempel 17 Jämförelser Python >>> "Aardvark" < "Abbot" True >>> "Queen" > "King" True >>> "a" * 4 == "aaaa" True >>> "a" in "The Holy Grail" True >>> "vers" in "universitet" True >>> "a" == "b" False Java "Aardvark".compareTo("Abbot") < 0 "Queen".compareTo("King") > 0 ("a"+"a"+"a"+"a").equals("aaaa") "The Holy Grail".contains("a") "universitet".contains("vers") "a".equals("b")

String 1: Strängar är objekt Strängar i Java är objekt String str = "Hello"; 19 str Object header: len chars (data) 5 Object header: length (data) ( 5) [0] H [1] e String-pekare String-objekt Teckenarray används internt för lagring Använder UTF-16 för att stödja hela Unicode: Oftast 1 char per tecken 2 chars för de "ovanligaste"

String 2: Literaler Även strängliteraler representerar objekt Kan användas "direkt" System.out.println("Hello".length()); // 5 20 Resulterar i ett String-objekt med 5 tecken Gör inte onödiga kopior new String("Hello")

String 3: Jämförelser Har två strängar samma innehåll? equals(string other), equalsignorecase(string other) 21 if (str == hello ) { // Jämför om det är samma strängobjekt == jämför pekare! if (str.equals( hello )) { // Jämför om strängarna innehåller samma tecken >>> x = "a" >>> "aa" is x * 2 False >>> "aa" == x * 2 True compareto(string other), comparetoignorecase(string other) -1 om this ska vara före other, 0 om lika, 1 om this ska vara efter other Jämför enligt Unicode-ordning: ڥ ABCD XYZ[\]^ ¾ ÀÁÂÃÄÅÆÇÈ ÔÕÖ ØÙ ĀĄ ƦƧ Ж Se även: java.text.collator Sortering enligt specifika språk (svenska: XYZÅÄÖ)

Konvertera text till numeriska värden Konvertera text till numeriska värden: Använd motsvarande numeriska klass Klassen Integer: static int parseint(string str); Klassen Float: Klassen Double: static float parsefloat(string str); static double parsedouble(string str); 23 double val = Double.parseDouble("127"); // 127.0

Formattering 1: Primitiva datatyper Konvertera primitiva datatyper till text: Använd de överlagrade String.valueOf()-metoderna static String valueof(char c) { static String valueof(int i) { static String valueof(boolean b) { 25 String str = String.valueOf(127); // "127" I strängkonkatenering är detta "underförstått" "x = " + 12 "x = 12"

Formattering 2: Object String Varje objekt har en strängrepresentation Metoden tostring() ärvs från Object Ska returnera en String som representerar objektet på något sätt 26 Exempel: public class Circle { private double x, y, r; private Circle(double x, double y, double r) { this.x = x; this.y = y; this.r = r; public static void main(string[] args) { System.out.println(new Circle(2.0, 4.0, 5.0)); >> java Circle Circle@a5e17120 Metoden println(object o) anropar o.tostring() Circle har ingen egen tostring() den ärvda implementationen från Object anropas klassnamn + "@" + ett unikt ID

Formattering 3: Object String Implementera en egen tostring()! 27 public class Circle { public String tostring() { return "Circle[" + x + ", " + y + ", " + r + ']'; Här adderas strängar men ett String-objekt är immutable (oföränderligt)! >> java Circle Circle[2.0, 4.0, 5.0]

Formattering 4: Strängkonkatenering StringBuilder: Manipulering av teckensekvenser Används av kompilatorn för att implementera "+" public String tostring() { return "Circle[" + x + ", " + y + ", " + r + ']'; public String tostring() { final StringBuilder buf = new StringBuilder(""); buf.append("circle["); buf.append(x); buf.append(", "); buf.append(y); buf.append(", "); buf.append(r); buf.append(']'); return buf.tostring(); Skapa en String med samma tecken som denna StringBuilder 28

Formattering 5: Strängkonkatenering 29 Kan bli ineffektivt public class ArrayList { private Object[] elements; Vi kan ju inte private int size; ändra en sträng så vad public String tostring() { händer här? String res = "ArrayList<"; for (int i = 0; i < size; i++) { if (i!= 0) res = res + ", "; res = res + elements[i].tostring(); res = res + ">"; return res; Kopiera alla tecken till StringBuilder Lägg till några tecken Kopiera till en ny String Sätt om pekaren Släng bort gamla objekt public class ArrayList { private Object[] elements; private int size; public String tostring() { String res = "ArrayList<"; for (int i = 0; i < size; i++) { if (i!= 0) { StringBuilder buf = new (); buf.append(res); buf.append(", "); res = buf.tostring(); StringBuilder buf2 = new (); buf2.append(res); buf2.append(elem[i].tostring()); res = buf.tostring();

Formattering 6: Strängkonkatenering Lösning: Använd StringBuilder själv! public class ArrayList { private Object[] elements; private int size; public String tostring() { String res = "ArrayList<"; for (int i = 0; i < size; i++) { if (i!= 0) res = res + ", "; res = res + elements[i].tostring(); res = res + ">"; return res; public class ArrayList { private Object[] elements; private int size; public String tostring() { StringBuilder buf = new (); buf.append("arraylist<"); for (int i = 0; i < size; i++) { if (i!= 0) { buf.append(", "); buf.append(elements[i]); buf.append(">"); return buf.tostring(); 30

Formattering 7: Detaljerad kontroll För mer detaljerad kontroll: String.format() Liknar printf() i C/C++ s=sträng d=heltal String s1 = String.format("Hello, %s! You are %d years old.\n", person.name, person.age); // Minst 30, högst 40 tecken (utfyllt med mellanslag) String s2 = String.format("Hello, %30.40s!\n", person.name); // Ange en locale String s3 = String.format(Locale.FRANCE, "e = %+10.4f", Math.E); // "e = +2,7183" 31 I PrintStream finns både println() och printf() System.out.printf("Hello, %s!\n", person.name); // Och så vidare

Formattering 8: Detaljerad kontroll 32 http://docs.oracle.com/javase/7/docs/api/java/text/messageformat.html Python >>> 'Use the {, {!'.format('power','amy') 'Use the power, Amy!' >>> "A {0 {1 is a {1 that's {0.".format('hot','dog') "A hot dog is a dog that's hot." Java String s1 = MessageFormat.format("Use the {0, {1", "power", "Amy"); String s2 = String.format("Use the %s, %s!", "power", "Amy"); String s3 = MessageFormat.format("A {0 {1 is a {1 that's {0.", "hot", "dog"); String s4 = String.format("A %0$s %1$s is a %1$s that's %0$s.", "hot", "dog");

Formattering 9: Array till sträng Arrayer ärver metoder from Object Av historiska anledningar: Bara default-implementationerna 33 Default-implementationer tostring(): typnamn + ID System.out.println(new int[10]); // [I@3effd44e System.out.println(new Circle[4]); // [LCircle;@2b78146d Vad vi oftast vill Hjälpmetoder i java.util.arrays System.out.println( Arrays.toString(new int[10])); // [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]