iReport – Text teilen

Innerhalb eines Reports können auch lange Texte vorkommen, die man anhand bestimmter Schlagwörter teilen will. Ein Beispiel wäre das Ersetzen eines Platzhalters im übergebenen Text durch andere/eigene Inhalte.

Für eine solche Aufgabe kann man mit Variablen arbeiten, und das so:

  • Gehen wir davon aus, daß unser Text im Feld $F{text} steht.
  • Weiter gehen wir davon aus, daß dieser an der Stelle geteilt werden soll, an dem unser Suchwort TRENNUNG steht. Dabei beachten: Es wird Case-Sensitive geprüft, also die Groß-/Kleinschreibung beachtet!
  • Jetzt legen wir eine Variable text1 an. Diese hat als Klasse java.lang.String und bekommt den Ausdruck $F{text}.split( "TRENNUNG" )[0].
    Dadurch bekommt die Variable den Inhalt aus dem Feld $F{text} vom ersten bis zum letzten Zeichen vor dem ersten Fund unseres Suchwortes.
  • Innerhalb des Reports kann jetzt der gefundene Teilinhalt über die Variable $V{text1} ausgegeben werden.

Was macht die Funktion split genau?
Durch den Aufruf wird der übergebene Text $F{text} nach dem Suchwort TRENNUNG durchsucht und je nach Anzahl der Funde in entsprechend viele Teile (Array) zerlegt.
Dabei enthalten diese Teile das Suchwort selbst nicht mehr und können über die Wertangabe entsprechend angesprochen werden.
Ein Beispiel:
$F{text} = "Dies ist ein Text TRENNUNG welcher über die SPLIT-Funktion TRENNUNG aufgeteilt werden soll."
In den Variablen würde dann folgender Inhalt stehen:
$F{text}.split( "TRENNUNG" )[0] = "Dies ist ein Text "
$F{text}.split( "TRENNUNG" )[1] = " welcher über die SPLIT-Funktion "
$F{text}.split( "TRENNUNG" )[2] = " aufgeteilt werden soll."

Es ist auch möglich, einen Text anhand von zwei Suchbegriffen „aus der Mitte“ zu schneiden. Am obigen Beispiel könnte das so aussehen:
$F{text}.split( "TRENNUNG" )[0].split( "SPLIT" )[0] = " welcher über die "
Hier wird schlicht das Ergebnis von split(„TRENNUNG“) noch einmal geteilt. Weitere Verkettungen sind dabei möglich.

Was passiert, wenn der Suchbegriff nicht vorkommt?
In diesem Falle würde die einfache Definition wie vor zum Crash führen, das Formular könnte insgesamt nicht zum Druck kommen.
Um das zu umgehen, sollten wir vorher prüfen, ob der Suchbegriff vorhanden ist, das erfolgt innerhalb des Variablenausdrucks und sähe dann so aus:
$F{text}.indexOf("TRENNUNG") > -1 ? $F{text}.split( "TRENNUNG" )[1] : $F{text}
Was passiert hier? Es wird das Vorhandensein geprüft (…indexOF…) und verzweigt: Wenn ja, dann splitten; Wenn nein, dann den kompletten Text übernehmen.

Als abschließende Info noch der Hinweis, daß die Funktion einen regulären Ausdruck erwartet. Aus diesem Grunde scheiden als Suchbegriff alle Inhalte mit den entsprechenden Sonderzeichen aus!

Und nun viel Spaß beim Teilen! 😉

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.