Kurz: def vorlage = new groovy.text.SimpleTemplateEngine().createTemplate(‘Hallo $name, du hast <%= punkte %> Punkte.’) println vorlage.make([name: “Tom”, punkte: 5]).toString()
Teil des Kurses Groovy
String-Methoden
def s = "Hallo Groovy-Welt"
println s.size()
println s.toUpperCase()
println s.substring(6, 12)
println s[0..4]
println s[-4..-1]
println s.replace("Welt", "Erde")
println s.replaceAll(/[aeiou]/, "*")
println s.split(/[ -]/).toList()
println s.contains("Groovy")
println s.startsWith("Hallo")
println s.indexOf("G")
println s.reverse()
println s.tokenize(" -")
println s.count("l")
println " trim ".trim() + "|"
println "abc".center(9, "*")
println "42".toInteger() + 1
println "3.5".toDouble() * 2
println "x".isNumber()
println "12".isNumber()
println "a,b,,c".split(",", -1).size()
println s =~ /G\w+/ ? "gefunden" : "nichts"
def m = (s =~ /(\w+)-(\w+)/)
println m[0]
println m[0][2]
println "2024-03-15".find(/(\d+)-(\d+)-(\d+)/) { all, j, mo, t -> "$t.$mo.$j" }
println "Preise: 12, 7 und 120".findAll(/\d+/)*.toInteger().sum()
println String.format("%05d|%-6s|%8.3f|%x", 42, "li", Math.PI, 255)
println String.format("%,d", 1234567)
println "ab".padLeft(5, "_")
println "CamelCaseText".split(/(?=[A-Z])/).toList()
println "wort".capitalize()
println "a\tb".expand()Ausgabe:
17
HALLO GROOVY-WELT
Groovy
Hallo
Welt
Hallo Groovy-Erde
H*ll* Gr**vy-W*lt
[Hallo, Groovy, Welt]
true
true
6
tleW-yvoorG ollaH
[Hallo, Groovy, Welt]
3
trim|
***abc***
43
7.0
false
true
4
gefunden
[Groovy-Welt, Groovy, Welt]
Welt
15.03.2024
139
00042|li | 3.142|ff
1,234,567
___ab
[Camel, Case, Text]
Wort
a bHeredocs und Templates
def name = "Mia"
def punkte = 17
def text = """\
Name: $name
Punkte: ${punkte * 2}
Datum: ${new Date(0).format('yyyy-MM-dd', TimeZone.getTimeZone('UTC'))}
"""
print text
def vorlage = new groovy.text.SimpleTemplateEngine().createTemplate('Hallo $name, du hast <%= punkte %> Punkte.')
println vorlage.make([name: "Tom", punkte: 5]).toString()
def slash = /C:\Pfad\ohne\Escapes/
println slash
println 'Er sagte "Hi"'
println "Tab:\tZeile\\n"
println "Unicode: \u00e4\u00f6\u00fc"Ausgabe:
Name: Mia
Punkte: 34
Datum: 1970-01-01
Hallo Tom, du hast 5 Punkte.
C:\Pfad\ohne\Escapes
Er sagte "Hi"
Tab: Zeile\n
Unicode: äöüDateien
def datei = File.createTempFile("groovy", ".txt")
datei.text = "eins\nzwei\ndrei\n"
datei << "vier\n"
println datei.text.readLines()
datei.eachLine { zeile, nr -> println "$nr: $zeile" }
println datei.readLines().size()
println datei.length()
println datei.exists()
println datei.name.endsWith(".txt")
datei.withWriter { w -> w.writeLine("neu"); w.writeLine("fertig") }
println datei.readLines()
datei.eachLine { if (it.startsWith("n")) println "beginnt mit n: $it" }
println datei.delete()
println datei.exists()
def verz = File.createTempDir()
new File(verz, "a.txt").text = "A"
new File(verz, "b.csv").text = "B"
println verz.listFiles().collect { it.name }.sort()
verz.eachFileMatch(~/.*\.txt/) { println it.name }
verz.deleteDir()Ausgabe:
[eins, zwei, drei, vier]
1: eins
2: zwei
3: drei
4: vier
4
20
true
true
[neu, fertig]
beginnt mit n: neu
true
false
[a.txt, b.csv]
a.txtJSON und XML
import groovy.json.*
import groovy.xml.*
def json = new JsonSlurper().parseText('{"name": "Mia", "alter": 17, "hobbys": ["Lesen", "Rad"], "adresse": {"stadt": "Berlin"}}')
println json.name
println json.hobbys[1]
println json.adresse.stadt
println json.hobbys.size()
def ausgabe = JsonOutput.toJson([name: "Tom", punkte: [1, 2, 3]])
println ausgabe
println JsonOutput.prettyPrint(ausgabe)
def xml = new XmlSlurper().parseText('<liste><eintrag id="1">Apfel</eintrag><eintrag id="2">Birne</eintrag></liste>')
println xml.eintrag.size()
println xml.eintrag[1].text()
println xml.eintrag.collect { it.@id.text() + "=" + it.text() }
def writer = new StringWriter()
new MarkupBuilder(writer).liste {
eintrag(id: 1, "Apfel")
eintrag(id: 2, "Birne")
}
println writerAusgabe:
Mia
Rad
Berlin
2
{"name":"Tom","punkte":[1,2,3]}
{
"name": "Tom",
"punkte": [
1,
2,
3
]
}
2
Birne
[1=Apfel, 2=Birne]
<liste>
<eintrag id='1'>Apfel</eintrag>
<eintrag id='2'>Birne</eintrag>
</liste>Merke
- Strings:
=~,find,findAll, Indexierungs[0..4],format, Templates - Dateien:
file.text,<<,eachLine,withWriter,eachFileMatch JsonSlurper/JsonOutputundXmlSlurper/MarkupBuilderverarbeiten JSON und XML- Slashy-Strings
/.../vermeiden Escape-Orgien bei Regex und Pfaden
Übungsaufgabe
Lies eine JSON-Datei ein und gib alle Namen aus einer Liste aus.
Quiz zur Selbstkontrolle
Wie liest man den gesamten Dateiinhalt?
- datei.text (richtig)
- datei.read()
- datei.content
- open(datei)
Wofür ist JsonSlurper?
- JSON-Text in Groovy-Objekte parsen (richtig)
- JSON erzeugen
- XML parsen
- HTTP-Aufrufe
Wofür sind Slashy-Strings /.../?
- Strings ohne Escape-Probleme, z. B. für Regex (richtig)
- Kommentare
- Division
- Pfade
Weiter im Kurs
Zurück: Klassen, Traits und AST-Transformationen
Weiter: DSLs und Metaprogrammierung
Alle Kapitel: Groovy im Überblick