Verarbeitung von Zeichenketten

Ähnliche Dokumente
Strings in Java. Die String Klasse und Methoden. A. Müller

Objektorientierte Programmierung. Kapitel 18: Strings

Objektorientierte Programmierung. Kapitel 10: Strings

Abschnitt 11: Beispiel: Die Klasse String (Teil 1)

Objektorientierte Programmierung. Kapitel 18: Strings

Tutorium 2. Strings. Skript zur Vorlesung Einführung in die Programmierung

Objektorientierte Programmierung. Kapitel 17: Strings

Einführung in die Programmierung

Abschnitt 7: Beispiel: Die Klasse String (Teil 1)

HEUTE. Unterschiede Pseudocode / Programmcode. Rundung und modulo (Tafel) Pseudocode: findprimeswithdifference. Strings in JAVA.

1 Hashing und die Klasse String

Autor: Alexander Brant

Kapitel 10. Programmierkurs. Grundlagen von Exceptions Behandlung von Exceptions

Einstieg in die Informatik mit Java

Modellierung und Programmierung 1

Einstieg in die Informatik mit Java

Zeichen. Datentyp char. char ch = 'x'; Page 1. Zeichen braucht man zur Verarbeitung von Texten, Namen, Bezeichnungen. Zeichencodes

String vs. StringBuffer. Class String

Der Datentyp String. Stringvariable und -vergleiche

Zeichenketten. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java. 16.

Abschnitt 17: Beispiel: Die Klasse String (Teil 2), das Interface Comparable<T>

String s1, s2; Eine Zuweisung geschieht am einfachsten direkt durch Angabe des Strings eingeschlossen in doppelte Hochkommata:

13. Erweiterte Konzepte Grundlagen der Programmierung 1 (Java)

Idee: 14.2 Generische Klassen

Programmieren in Java

Programmieren I. Strings und Wrapperklassen Heusch 7.3 Ratz Institut für Angewandte Informatik

Übungsblatt 13. Abgabe / Besprechung in Absprache mit dem Tutor

Objektorientierte Programmierung. Kapitel 19: Wrapper-Klassen

Wie kann man es verhindern das Rad immer wieder erneut erfinden zu müssen?

Die Klasse string Verfasser: Christian Bartl

Programmieren I. Strings und Wrapperklassen Heusch 7.3 Ratz Institut für Angewandte Informatik

String vs. StringBuffer. Class String

Diana Lange. Generative Gestaltung Komplexe Datentypen: String

Informatik II Übung 3

Aufruf des Compilers in der Kommandozeile und Ausführung des Programms:

IT I: Heute. Klasse Object. equals, hashcode, tostring. HashSet IT I - VO 6 1

Übungsblatt 13. Abgabe / Besprechung in Absprache mit dem Tutor

+ auch bei Strings erlaubt

5.4 Arrays. Oft müssen viele Werte gleichen Typs gespeichert werden. Idee: Lege sie konsekutiv ab! Greife auf einzelne Werte über ihren Index zu!

Tag 4 Repetitorium Informatik (Java)

Verkettete Datenstrukturen: Listen

Inhalt (2) Informatik B Objektorientierte Programmierung in Java. Vorlesung 02: Objektorientierte Programmierung (Teil 2) Konstruktoren.

Einführung in die Programmierung

Algorithmen und Programmierung III

Institut für Programmierung und Reaktive Systeme. Java 3. Markus Reschke

IT I: Heute. Klasse Object. equals, hashcode, tostring. HashSet IT I - VO 6 1

Objekttypen. Referenzen, Objekte, Gleichheit, Wrapper, Arrays, mehr-dimensionale Arrays, Bildbearbeitung, krumme Arrays

3.8 Objekttypen und Arrays. Wir werden uns in diesem Kapitel näher mit den Objekttypen in Java beschäftigen.

Objektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types)

Grundlagen der Programmierung

Die Klasse java.lang.object. Thorsten Treffer

Modellierung und Programmierung 1

Vorkurs Informatik WiSe 16/17

Grundlagen der Programmierung

Programmieren Vorkurs

Arrays. Theorieteil. Inhaltsverzeichnis. Begriffe. Programmieren mit Java Modul 3. 1 Modulübersicht 3

Einführung in die Informatik Algorithmen und Datenstrukturen. Thema 12 Datenverarbeitung

Tag 8 Repetitorium Informatik (Java)

Informatik II. Woche 10, Giuseppe Accaputo

Methoden. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

Praktische Informatik I

Einstieg in die Informatik mit Java

Methoden und Wrapperklassen

Einführung in die Informatik

INP (4) Prof. Dr.-Ing. S. Gössner. University of Applied Sciences Lippe & Höxter

Tag 4 Repetitorium Informatik (Java)

Algorithmen und Programmierung III

Objekte haben eine eigene Notation, also Schreibweise, beim Aufruf:

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Referenzen. Referenzen

Praktische Eine Einführung

Institut für Programmierung und Reaktive Systeme 24. April Programmieren II. 10. Übungsblatt

Städtisches Gymnasium Olpe Java Ht Informatik - Q1 Die Klasse List im Abitur Methoden und Beispielcode Hier alle wichtigen Methoden. Ein Beispielcode

Johannes Unterstein - TINF16 - Java - Sommersemester 2017 JAVA. Weiterführende Spracheigenschaften

Organisatorisches. Folien (u.a.) auf der Lva-Homepage Skriptum über MU Online

Übersicht PERL. !!!! Wichtig: Nach dem Befehl einem Strichpunkt setzen!!!!

Organisatorisches. Folien (u.a.) gibt's auf der Lva-Homepage zum Download

Algorithmen und Datenstrukturen Sommersemester Übung Abgabe bis , 10:00 Uhr

Objektorientierte Programmierung

Erste Java-Programme (Arrays und Schleifen)

Felder - Arrays. Typ feldname[] = new Typ[<ganze Zahl >]; Beispiel: double vektor[] = new double[5]; auch eine Initialisierung ist möglich.

Hüllklassen. Gerd Bohlender. 25. Juni Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java

Informatik II Übung 3. Pascal Schärli

Grundelemente objektorientierter Sprachen (1)

Arbeitsblätter für die Lehrveranstaltung OOP JAVA 1

Erste Java-Programme (Scopes und Rekursion)

4 Der Umgang mit Zeichenketten

Computeranwendung und Programmierung (CuP)

Dateien. DVG Dateien 1

Grundelemente objektorientierter Sprachen (1)

Abgabe: (vor 12 Uhr)

Informatik II - Tutorium 4

Organisatorisches. drei Gruppen Gruppe 1: 10:10-11:40, Gruppe 2: 11:45-13:15 Gruppe 3: 13:20-14:50

Organisatorisches. Neue Übungsblätter: Nur mehr elektronisch? Abgabe Di, , 14 Uhr bis Do, , 8Uhr

Transkript:

Verarbeitung von Zeichenketten

Character Die Character-Klassebietet statische Prüffunktionen isxxx(), die bestimmen, ob ein char einer gewissen Kategorie angehört. (Ist der char eine Ziffer, ein Leerzeichen, ) Character.isLetter(charch) Character.isLetterOrDigit(charch) Character.isLowerCase(charch) Character.isUpperCase(charch) Character.isWhitespace(charch) Die Rückgabe der isxxx()-funktionenist boolean. Die statischen Funktionen tolowercase(charch) und touppercase(char ch) liefern ein char zurück. 2

Die Klasse java.lang.string

Die Klasse String Die Klasse java.lang.string kapselt die Implementierung für eine Zeichenkette. Wird die Zeichenkette intern als Zeichenarray, als verkette Liste, als Baum, als... gespeichert? Wissen wir nicht, ist aber aus objektorientierter Sicht egal. (Aus Effizienzgründe interessiert das natürlich schon.) Alles, was in doppelten Anführungszeichen steht, ist als String-Literal ein String-Objekt. System.out.println( "tutego" ); Diese Referenz lässt sich in einer Referenzvariablen merken: String s = "tutego"; 4

Strings sind immutable Eine wichtige Eigenschaft von Strings ist, das sie unveränderlich (immutable) sind. Im String Tutego lässt sich das erste Zeichen nicht zu einem kleinen t konvertieren. Jedoch kann die Referenzvariable jederzeit neu belegt werden. String s = "TUTEGO"; s = "Tutego"; s = "tutego"; 5

Einfache Abfragen Die Länge eines Strings: length() int len = "tutego".length(); // 6 Zeichen an der Stelle: charat(int index) char c = "tutego".charat( 1 ); // u Suchen im String: indexof(int), indexof(string), lastindexof() Die Methoden liefern -1, wenn nichts gefunden wurde. int pos = "tutego".indexof( 'u' ); // 1 Ob ein String mit einem anderen String beginnt oder endet zeigt startswith() und endswith(). "http://tutego.com".startswith("http"); // true 6

String-Vergleiche Vergleiche sollten nicht mit == gemacht werden, da so nur Referenzen verglichen werden. Die Klasse String implementiert equals() so, dass Zeichenketten auf Gleichheit überprüft werden. String s1 = "Foo", s2 = "Foo"; out.println( s1.equals(s2) ); boolean b = "Foo".equals( s ); // true // true Vergleiche unabhängig der Groß-/Kleinschreibung macht boolean equalsignorecase( String ). Mit regionmatches() lässt sich vergleichen, ob ein Teilstring mit dem String übereinstimmt. Lexikografisch vergleicht compareto(). Die Rückgabe ist kein boolean, sondern <0, =0 oder >0. 7

Konvertierungen in neue Objekte Da String-Objekte immutablesind, können Funktionen, die nach Veränderung aussehen, nur neue Objekte liefern. Leerraum vorne und hinten schneidet ab: String trim( String ) Den String in Klein-bzw. Großbuchstaben konvertieren String tolowercase( String ) String touppercase( String ) Zum Suchen/Ersetzen: String replace( char, char ) String replaceall( CharSequence, CharSequence) String ist eine CharSequence. 8

Strings und Zeichenfelder tochararray() wandelt ein String in ein Array um: char[] vokale = "aeiouäöü".tochararray(); Um ein Feld von charsin einen String umwandeln, wird der Konstruktor von String genutzt: char[] cs = { 'F', 'o', 'o' }; String two = new String( cs ); boolean b = "Foo".equals( two ); // true 9

StringBuilderund StringBuffer

Die Klasse StringBuffer/StringBuilder Die Klasse java.lang.stringbuffer und seit Java 5.0 StringBuilder behandelt veränderbare Strings. Beim StringBuffer sind alle Methoden synchronisiert, also gegen nebenläufige Veränderungen durch Threads sicher. Dem StringBuilder fehlt die Synchronisation; er ist daher bei nur einem Thread etwas schneller. Einen StringBuffer/StringBuilder kann man mit dem Standard-Konstruktoroder parametrisierten Konstruktor anlegen. Mit einem übergebenen String wird der StringBuffer bzw. StringBuilder gleich gefüllt. StringBuilder sb = new StringBuilder( "Nun" ); 11

Anhängen und Löschen von Teilen Die Zeichenfolgen können größer werden, in dem Teile mit append() angehängt werden. StringBuilder sb = new StringBuilder( "Es" ); sb.append( " wird warm." ); Die append() Methode gibt eine Referenz auf das aktuelle StringBuilder Objekt zurück. Somit kann man append() Aufrufe auch hintereinander schreiben. StringBuilder sb = new StringBuilder( "Es" ); sb.append( " wird " ).append( "warm." ); Zeichen können gelöscht werden: delete(), deletecharat(). 12

+ und StringBuffer/StringBuilder Die in Java so praktische Konkatenation (+) wird vom Compiler umgebaut. double pi = Math.PI; int n = 9; String bum = "pi" + pi + ' ' + n; Vor 5.0 StringBuffer String bum = new StringBuilder().append( "pi" ).append( pi ).append( ' ' ).append( n ).tostring(); Das Problem ist: Es entstehen besonders in Schleifen viele temporäre Objekte. 13

Von String nach StringBuilder Erzeuge das Alphabet»abc...z«im String s. String s = ""; for ( char c = 'a'; c <= 'z'; ++c ) s += c; Das Problem ist: Hier entstehen viele Objekte. Wie viele? Besser ist eine Lösung mit StringBuilder. StringBuilder sb = new StringBuilder( 26 ); for ( char c = 'a'; c <= 'z'; ++c ) sb.append( c ); String s = sb.tostring(); 14

Konvertierungen, Zerlegungen

Von Etwas in String Die überladenen statischen Funktionen String.valueOf(val) liefern eine String-Repräsentation von val. String s = String.valueOf( 1 ); // "1" Ein beliebtes Java-Idiom ist auch String s = "" + i; // i ist ein int oder irgendwas Jedes Objekt besitzt die Methode tostring(), die eine Stringrepräsentation des Objektzustandes zurückgibt. Sie wird von Object geerbt und oft überschrieben. Für Referenzen ruft String.valueOf(o) die Methode tostring() des Objekts o auf. Ein Beispiel: String date = String.valueOf( new Date() ); 16

Tokenisierungdurch split() Oftmals stellt sich die Aufgabe, einen String in eine Reihe von Teilstrings (Tokens) zu zerlegen. Ein Token ist eine zusammenhängende Sequenz von Zeichen, die durch Trennzeichen (engl. delimiter) getrennt sind. Ist das Leerzeichen der Delimiter, so entstehen fünf einzelne Strings: Gestern, war, heute, noch, morgen. String s = "Gestern war heute noch morgen"; 17

String#split() Die Objektmethode split() liefert ein Feld von String- Objekten zu einem gegebenen Delimiter. String s = "Gestern war heute noch morgen"; String[] tokens = s.split( " " ); for ( String token : tokens ) System.out.println( token ); Der Delimiterbei split() ist ein regulärer Ausdruck! Zeichen mit Sonderfunktion, wie. oder?, müssen passend ausmaskiert werden. 18

Die Klasse Scanner java.util.scanner ist eine flexible Klasse zum Zerlegen von Eingaben. Ein Scanner-Objekt kann mit unterschiedlichen Konstruktoren aufgebaut werden: Scanner( String ) Scanner( File ) Scanner( InputStream ), Zum Auslesen gibt es eine Reihe von hasnextxxx()-und nextxxx()-methoden. Die nextxxx()-methodeliefert die Information, ob ein weiteres Tokengelesen werden kann. nextxxx() liefert das nächste Token. 19

Alle Zeilen mit der Scanner-Klasse Mit dem Pärchen hasnextline() und nextline() der Scanner- Klasse lässt sich einfach eine Textdatei Zeile für Zeile durchlaufen: File f = new File( dateiname ); Scanner scnr = new Scanner( f ); while ( scnr.hasnextline() ) System.out.println( scnr.nextline() ); scnr.close(); 20