DCV 2022 03/Strukturierte Programmierung Uebungen/String Operationen: Unterschied zwischen den Versionen
Drlue (Diskussion | Beiträge) |
Gyula (Diskussion | Beiträge) |
||
| (21 dazwischenliegende Versionen von einem anderen Benutzer werden nicht angezeigt) | |||
| Zeile 39: | Zeile 39: | ||
=== Aufgabe: Buchstaben zählen === | === Aufgabe: Buchstaben zählen === | ||
In der folgenden Aufgabe sollen alle Buchstaben eines | In der folgenden Aufgabe sollen alle Buchstaben eines Texts gezählt werden. Den Text erhältst du über {{JSL|data.Texts.getSimpleText()}}. | ||
Um die einzelnen Buchstaben zu zählen soll ein {{JSL|int[]}} verwendet werden. Der entsprechende {{JSL|char}} kann für das Array als Index verwendet werden. Gib am Schluss die Anzahl der Buchstaben aus. | |||
'''Ausgabe''' | '''Ausgabe''' | ||
| Zeile 48: | Zeile 50: | ||
... | ... | ||
}} | }} | ||
=== Aufgabe: Daten tabellarisch darstellen === | === Aufgabe: Daten tabellarisch darstellen === | ||
Erstelle einen schönen tabellarischen Ausdruck aus der folgenden Arrays: | Erstelle einen schönen tabellarischen Ausdruck aus der folgenden Arrays: | ||
{{ | {{JML|code= | ||
String[] firstName = {"Alfonso", "Beatrix-Eleonor", "Cecil", "Daniel", "Elmar"}; | |||
String[] lastName = {"Klein", "Kinderdorfer", "Al Elmenar", "Schmidt", "Simma"}; | |||
int[] age = {40, 78, 5, 18, 81}; | |||
String[] place = {"Wien", "Schwarzach", "Wiener Neudorf", "Sankt Pölten", "Sankt Pölten"}; | |||
float[] distanceFromCapital = {0f, 654.4f, 12.457634366f, 120.0f, 119.9999f}; | |||
}} | }} | ||
| Zeile 63: | Zeile 64: | ||
=== Aufgabe: Suche nach "Hesse" === | === Aufgabe: Suche nach "Hesse" === | ||
Verwende für folgende Aufgabe den Text in {{JSL|data.Texts.HESSE}}. | |||
Wie oft kommt das Wort "Hesse" in folgendem Text vor? An welchen Stellen? | Wie oft kommt das Wort "Hesse" in folgendem Text vor? An welchen Stellen? | ||
=== Aufgabe: Text "Hesse" hervorheben === | |||
Verwende für folgende Aufgabe den Text in {{JSL|data.Texts.HESSE}}. | |||
}} | |||
Bei der Ausgabe des Texts sollen alle Vorkommonisse von '''Hesse''' auf Uppercase ('''HESSE''') gestellt werden. | |||
Verwende die {{JSL|replace()}} Funktion. | Verwende die {{JSL|replace()}} Funktion. | ||
Erweitere dein Programm um User Input, dass der User beliebige Worte auf Uppercase ändern kann. | Erweitere dein Programm um User Input, dass der User beliebige Worte auf Uppercase ändern kann. | ||
=== Aufgabe: | === Aufgabe: Längster gemeinsamer Substring === | ||
Der Anwender soll zwei {{JSL|Strings}} eingeben. Finde den längsten gemeinsamen Substring beider {{JSL|Strings}}. | |||
# Finde das längste gemeinsame Wort | |||
## Erstelle aussagekräftige Unittests | |||
# '''Bonus''' finde die längste gemeinsame Zeichenkette | |||
## Erstelle aussagekräftige Unittests | |||
'''Ausgabe 1''' | |||
{{BML|code= | |||
Bitte gib Wort 1 ein: | |||
>>>Hallo wie gehts dir? | |||
Bitte gib Wort 2 ein: | |||
>>>Mir gehts gut! | |||
längster gemeinsamer Substring: | |||
gehts | |||
}} | |||
{{ | '''Ausgabe 2 (Bonus)''' | ||
{{BML|code= | |||
Bitte gib Wort 1 ein: | |||
>>>Barbara | |||
Bitte gib Wort 2 ein: | |||
>>>Rhabarber | |||
längster gemeinsamer Substring: | |||
bar | |||
}} | }} | ||
=== Aufgabe: Split === | |||
Erstelle eine Methode welche den {{JSL|String}} | |||
{{JSL|"Heute wird ein guter Tag! Heute wird der beste Tag überhaupt! Heute wird ein spitzen super Tag!"}} | |||
mit Hilfe eines gegebenen Strings zerlegt, welcher als Parameter mitgegeben wird und den das {{JSL|String[]}} zurückgibt. Füge das {{JSL|String[]}} mittels eines {{JSL|StringBuilder}} wieder zusammen füge jedoch nach jedem {{JSL|append}} auch einen {{JSL|System.lineSeparator()}} hinzu. Gib dann den {{JSL|String}} den du vom {{JSL|StringBuilder}} erhältst aus. Teste deine Methode in der {{JSL|main}} Methode mit einigen Beispielen. | |||
'''Aufruf''' | |||
{{JML|code= | |||
String[] words = wordSplit(text, "Tag"); | |||
... | |||
}} | |||
'''Ausgabe''' | |||
{{BML|code= | |||
Heute wird ein guter | |||
! Heute wird der beste | |||
überhaupt! Heute wird ein spitzen super | |||
! | |||
}} | |||
=== Aufgabe: Split & Sort === | |||
Erstelle eine Methode welche den {{JSL|String}} | |||
{{JSL|"Heute wird ein guter Tag! Heute wird der beste Tag überhaupt! Heute wird ein spitzen super Tag!"}} | |||
''' | in seine Worte zerlegt. Sortiere dann die Worte mit '''Bubblesort'''. Füge das {{JSL|String[]}} mittels eines {{JSL|StringBuilder}} wieder zusammen gib dann den {{JSL|String}}, den du von {{JSL|StringBuilder}} erhältst aus. | ||
Sortier lexikographisch aufsteigend mittels {{JSL|string.compareTo(...)}} | |||
'''Ausgabe''' | |||
{{BML|code= | |||
[überhaupt!, wird, wird, wird, super, spitzen, guter, ein, ein, der, beste, Tag!, Tag!, Tag, Heute, Heute, Heute]}} | |||
=== Aufgabe: Replace all === | === Aufgabe: Replace all === | ||
| Zeile 194: | Zeile 166: | ||
# Alle Zahlen von '''1 bis 3''' und '''6 bis 9''' und gib ihn aus | # Alle Zahlen von '''1 bis 3''' und '''6 bis 9''' und gib ihn aus | ||
=== Aufgabe: | === Aufgabe: Wortanalyse === | ||
Verwende für folgende Aufgabe den Text in {{JSL|data.Texts.HESSE}} und {{JSL|data.Texts.getSimpleText()}} um eine Wortanalyse durchzuführen. | |||
Erstelle für folgende Aufgabenstellungen eigene Methoden. Diese sollen so flexibel wie möglich und testbar geschrieben werden. Achte darauf vor der Verarbeitung unerwünschte Zeichenfolgen zu entfernen, diese könnten sich negativ auf die Textverarbeitung auswirken (''', oder . oder -''' ist nicht das kürzeste Wort). Erstelle für jede Aufgabe einen aussagekräftigen Unit Test: | |||
# Längstes Wort | |||
# Kürzestes Wort | |||
# Worte alphabetisch sortieren | |||
# Worte alphabetisch sortieren Unique (jedes Wort darf nur einmal ausgegeben werden) | |||
# Worte zählen und nach ihrer Häufigkeit ausgeben | |||
''' | === Aufgabe: Email Regex aka. Regbert === | ||
Erstelle einen '''regulären Ausdruck''' ('''Reg'''ular '''Ex'''pression) für Email Adressen. | |||
{{JML|code= | {{JML|code= | ||
String[] | String regex = "[richtiger Regex hier]"; | ||
}} | }} | ||
'''Ausgabe''' | '''Aufruf'''{{Space10}}{{JSL|System.out.println("alfons@drlue.at".matches(regex));}}{{Space10}}'''Ausgabe'''{{Space10}}{{BSL|true}} | ||
'''Aufruf'''{{Space10}}{{JSL|System.out.println("rambina.alfons@drlue.at".matches(regex));}}{{Space10}}'''Ausgabe'''{{Space10}}{{BSL|true}} | |||
'''Aufruf'''{{Space10}}{{JSL|System.out.println("rambina1.1alfons@drlue.at".matches(regex));}}{{Space10}}'''Ausgabe'''{{Space10}}{{BSL|true}} | |||
'''Aufruf'''{{Space10}}{{JSL|System.out.println("1rambina1.alfons@drlue.at".matches(regex));}}{{Space10}}'''Ausgabe'''{{Space10}}{{BSL|false}} | |||
'''Aufruf'''{{Space10}}{{JSL|System.out.println("@drlue.at".matches(regex));}}{{Space10}}'''Ausgabe'''{{Space10}}{{BSL|false}} | |||
'''Aufruf'''{{Space10}}{{JSL|System.out.println("drlue.at".matches(regex));}}{{Space10}}'''Ausgabe'''{{Space10}}{{BSL|false}} | |||
'''Aufruf'''{{Space10}}{{JSL|System.out.println("asdf@drlue".matches(regex));}}{{Space10}}'''Ausgabe'''{{Space10}}{{BSL|false}} | |||
'''Aufruf'''{{Space10}}{{JSL|System.out.println("asdf@microsoft.c".matches(regex));}}{{Space10}}'''Ausgabe'''{{Space10}}{{BSL|false}} | |||
=== Aufgabe: Rekursive Function: Factorial === | |||
Erstelle eine Function Faktorial auszurechnen. | |||
{{ | {{JML|code= | ||
fakt(n) = n * fakt(n -1) | |||
fakt(1) = 1 | |||
}} | }} | ||
=== Aufgabe: | === Aufgabe: Rekursive Function: Permutation === | ||
Erstelle eine | Erstelle eine Function, die die Permutationen generiert. | ||
Kontroll Check: Anzahl generierte Permutation muss gleich sein wie Faktorial von Anzahl Buchstaben. | |||
{{ | Zum Beispiel: | ||
{{JML|code= | |||
perm("ABCD") | |||
Permutationen: | |||
ABCD | |||
ABDC | |||
ACBD | |||
ACDB | |||
ADBC | |||
ADCB | |||
BACD | |||
BADC | |||
BCAD | |||
BCDA | |||
BDAC | |||
BDCA | |||
CABD | |||
CADB | |||
CBAD | |||
CBDA | |||
CDAB | |||
CDBA | |||
DABC | |||
DACB | |||
DBAC | |||
DBCA | |||
DCAB | |||
DCBA | |||
}} | |||
Aktuelle Version vom 22. April 2022, 09:06 Uhr
Im folgenden sollen die String Operationen charAt(), toCharArray(), indexOf(...), replaceAll(...), matches(...), split(...) erarbeitet werden.
Aufgabe: Bubblesort mit Strings
Verwende das gegebene String[] und sortiere es mit einem selbsterstellten Bubblesort Algorithmus und gib es dann aus. Der Bubblesort Algorithmus soll in einer eigenen Methode implementiert werden. Der Aufruf und die Ausgabe erfolgt in der main Methode.
- Sortiere die Namen aufsteigend (Ascending)
- Sortiere die Namen absteigend (Descending)
Tip.: Strings können mit der Instanz MethodecompareToderStringKlasse verglichen werden:"a".compareTo("b")
String[] names new String[]{"Philipp", "Arda", "Murat", "Jimmy \"Cemil\" McGill", "Sergej", "Razvan", "Timo", "Aron", "Gyula", "Lukas" };
Aufgabe: Bubblesort mit Strings Extended
Verwende das aus der vorhergehenden Aufgabe gegebene String[] und sortiere es mit einem selbsterstellten Bubblesort Algorithmus und gib es dann aus. Der Bubblesort Algorithmus soll in einer eigenen Methode implementiert werden. Der Aufruf und die Ausgabe erfolgt in der main Methode. Die Methode soll nun zusätzlich zum String[] Parameter einen weiteren boolean als Parameter erhalten. Dieser boolean entscheidet, ob das String[] aufsteigend, oder absteigend sortiert wird.
Aufgabe: Bubblesort mit Strings an Character Index
Verwende das aus der vorhergehenden Aufgabe gegebene String[] und sortiere es mit einem selbsterstellten Bubblesort Algorithmus und gib es dann aus. Der Bubblesort Algorithmus soll in einer eigenen Methode implementiert werden. Der Aufruf und die Ausgabe erfolgt in der main Methode. Die Methode soll nun zusätzlich zum String[] Parameter einen weiteren int als Parameter erhalten. Dieser int steht für den Index des char im String nach dem sortiert werden soll.
Einencharan einer bestimmten Stelle einesStringerhälts du mitstring.charAt(i), oder auch mitstring.toCharArray()[i], wobei das natürlich ineffizient ist, wenn es öfter aufgerufen werden muss.
Prüfe zuerst ob die Sortierung nach dem gegebenen Index erfolgen kann. Wenn der Index zu groß ist, mach eine entsprechende Ausgabe und sortiere nicht.
Aufgabe: Reverse
Es soll ein Wort über die Kommandozeile eingelesen werden, dieses Wort soll umgedreht und anschließend ausgegeben werden. Verwende hierfür text.toCharArray() für das Aufsplitten und new String(charArray) zum Zusammenfügen.
Ausgabe
Willkommen zum Reverseprogramm!!!111
>>>Hallo
ollaH
Aufgabe: Randomize
Es soll ein Wort über die Kommandozeile eingelesen werden, dieses die Buchstaben des Wortes sollen zufällig vertauscht werden und anschließend ausgegeben werden. Verwende hierfür text.toCharArray() für das Aufsplitten, erstelle ein neues char[], befülle es zufällig mit den Buchstaben des Wortes, füge es mittels new String(charArray) zusammen und gib es aus.
Ausgabe
Willkommen zum Zufallsshuffle Programm!!!111
>>>Hallo
lolHa
Aufgabe: Buchstaben zählen
In der folgenden Aufgabe sollen alle Buchstaben eines Texts gezählt werden. Den Text erhältst du über data.Texts.getSimpleText().
Um die einzelnen Buchstaben zu zählen soll ein int[] verwendet werden. Der entsprechende char kann für das Array als Index verwendet werden. Gib am Schluss die Anzahl der Buchstaben aus.
Ausgabe
A: 10
B: 20
C: 1
...
Aufgabe: Daten tabellarisch darstellen
Erstelle einen schönen tabellarischen Ausdruck aus der folgenden Arrays:
String[] firstName = {"Alfonso", "Beatrix-Eleonor", "Cecil", "Daniel", "Elmar"};
String[] lastName = {"Klein", "Kinderdorfer", "Al Elmenar", "Schmidt", "Simma"};
int[] age = {40, 78, 5, 18, 81};
String[] place = {"Wien", "Schwarzach", "Wiener Neudorf", "Sankt Pölten", "Sankt Pölten"};
float[] distanceFromCapital = {0f, 654.4f, 12.457634366f, 120.0f, 119.9999f};
Denke daran, dass eine Tabelle Kopfzeile, Trennzeichen haben kann.
Aufgabe: Suche nach "Hesse"
Verwende für folgende Aufgabe den Text in data.Texts.HESSE.
Wie oft kommt das Wort "Hesse" in folgendem Text vor? An welchen Stellen?
Aufgabe: Text "Hesse" hervorheben
Verwende für folgende Aufgabe den Text in data.Texts.HESSE.
Bei der Ausgabe des Texts sollen alle Vorkommonisse von Hesse auf Uppercase (HESSE) gestellt werden.
Verwende die replace() Funktion.
Erweitere dein Programm um User Input, dass der User beliebige Worte auf Uppercase ändern kann.
Aufgabe: Längster gemeinsamer Substring
Der Anwender soll zwei Strings eingeben. Finde den längsten gemeinsamen Substring beider Strings.
- Finde das längste gemeinsame Wort
- Erstelle aussagekräftige Unittests
- Bonus finde die längste gemeinsame Zeichenkette
- Erstelle aussagekräftige Unittests
Ausgabe 1
Bitte gib Wort 1 ein:
>>>Hallo wie gehts dir?
Bitte gib Wort 2 ein:
>>>Mir gehts gut!
längster gemeinsamer Substring:
gehts
Ausgabe 2 (Bonus)
Bitte gib Wort 1 ein:
>>>Barbara
Bitte gib Wort 2 ein:
>>>Rhabarber
längster gemeinsamer Substring:
bar
Aufgabe: Split
Erstelle eine Methode welche den String
"Heute wird ein guter Tag! Heute wird der beste Tag überhaupt! Heute wird ein spitzen super Tag!"
mit Hilfe eines gegebenen Strings zerlegt, welcher als Parameter mitgegeben wird und den das String[] zurückgibt. Füge das String[] mittels eines StringBuilder wieder zusammen füge jedoch nach jedem append auch einen System.lineSeparator() hinzu. Gib dann den String den du vom StringBuilder erhältst aus. Teste deine Methode in der main Methode mit einigen Beispielen.
Aufruf
String[] words = wordSplit(text, "Tag");
...
Ausgabe
Heute wird ein guter
! Heute wird der beste
überhaupt! Heute wird ein spitzen super
!
Aufgabe: Split & Sort
Erstelle eine Methode welche den String
"Heute wird ein guter Tag! Heute wird der beste Tag überhaupt! Heute wird ein spitzen super Tag!"
in seine Worte zerlegt. Sortiere dann die Worte mit Bubblesort. Füge das String[] mittels eines StringBuilder wieder zusammen gib dann den String, den du von StringBuilder erhältst aus.
Sortier lexikographisch aufsteigend mittels string.compareTo(...)
Ausgabe
[überhaupt!, wird, wird, wird, super, spitzen, guter, ein, ein, der, beste, Tag!, Tag!, Tag, Heute, Heute, Heute]
Aufgabe: Replace all
Ersetze im String
"Heute wird ein guter Tag! Heute wird ein noch guterer Tag! Heute wird ein spitzen guter Tag!"
wird durch war und ist und gib ihn aus.
Aufgabe: Replace all 2
Lösche im String
"Heute wird ein guter Tag! Heute wird ein noch guterer Tag! Heute wird ein spitzen guter Tag!"
- Jeden Kleinbuchstaben und gib ihn aus
- Jeden Großbuchstaben und gib ihn aus
- Jedes Leerzeichen und gib ihn aus
- Jedes Ausrufezeichen ! und gib ihn aus
Aufgabe: Replace all 3
Lösche im String
"749813247132984712039487123049871204398712039487"
- Alle Zahlen von 0 bis 9 und gib ihn aus
- Alle Zahlen von 1 bis 9 und gib ihn aus
- Alle Zahlen von 2 bis 4 und gib ihn aus
- Alle Zahlen von 1 bis 3 und 6 bis 9 und gib ihn aus
Aufgabe: Wortanalyse
Verwende für folgende Aufgabe den Text in data.Texts.HESSE und data.Texts.getSimpleText() um eine Wortanalyse durchzuführen.
Erstelle für folgende Aufgabenstellungen eigene Methoden. Diese sollen so flexibel wie möglich und testbar geschrieben werden. Achte darauf vor der Verarbeitung unerwünschte Zeichenfolgen zu entfernen, diese könnten sich negativ auf die Textverarbeitung auswirken (, oder . oder - ist nicht das kürzeste Wort). Erstelle für jede Aufgabe einen aussagekräftigen Unit Test:
- Längstes Wort
- Kürzestes Wort
- Worte alphabetisch sortieren
- Worte alphabetisch sortieren Unique (jedes Wort darf nur einmal ausgegeben werden)
- Worte zählen und nach ihrer Häufigkeit ausgeben
Aufgabe: Email Regex aka. Regbert
Erstelle einen regulären Ausdruck (Regular Expression) für Email Adressen.
String regex = "[richtiger Regex hier]";
Aufruf System.out.println("alfons@drlue.at".matches(regex)); Ausgabe true
Aufruf System.out.println("rambina.alfons@drlue.at".matches(regex)); Ausgabe true
Aufruf System.out.println("rambina1.1alfons@drlue.at".matches(regex)); Ausgabe true
Aufruf System.out.println("1rambina1.alfons@drlue.at".matches(regex)); Ausgabe false
Aufruf System.out.println("@drlue.at".matches(regex)); Ausgabe false
Aufruf System.out.println("drlue.at".matches(regex)); Ausgabe false
Aufruf System.out.println("asdf@drlue".matches(regex)); Ausgabe false
Aufruf System.out.println("asdf@microsoft.c".matches(regex)); Ausgabe false
Aufgabe: Rekursive Function: Factorial
Erstelle eine Function Faktorial auszurechnen.
fakt(n) = n * fakt(n -1)
fakt(1) = 1
Aufgabe: Rekursive Function: Permutation
Erstelle eine Function, die die Permutationen generiert.
Kontroll Check: Anzahl generierte Permutation muss gleich sein wie Faktorial von Anzahl Buchstaben.
Zum Beispiel:
perm("ABCD")
Permutationen:
ABCD
ABDC
ACBD
ACDB
ADBC
ADCB
BACD
BADC
BCAD
BCDA
BDAC
BDCA
CABD
CADB
CBAD
CBDA
CDAB
CDBA
DABC
DACB
DBAC
DBCA
DCAB
DCBA