Arrays van objecten

Arrays kunnen zowel primitieve datatypen als referentietypen(objecten) bevatten. In het laatste geval spreken we van een array van objecten, omdat de array een aantal verwijzingen naar objecten van hetzelfde type bevat (tenzij gebruik gemaakt wordt van overerving & polymorfie, zie Hoofdstuk 10).

In het volgende voorbeeld maken we een array van String-objecten:

  String[] lines = new String[5];

In dit voorbeeld worden geen vijf String-objecten gecreëerd, maar wel een array van vijf referenties naar een String-object. Deze referenties worden geïnitialiseerd met de waarde null.

We moeten daarom de vijf String-objecten afzonderlijk creëren en de referenties toekennen aan de elementen van de array:

  String[] lines = new String[5];
  lines[0] = "Hello world";
  lines[1] = "Hello Mars";
  lines[2] = "Hello Venus";
  lines[3] = "Hello Jupiter";
  lines[4] = "Hello Saturn";

Ook hier kunnen we de array initialiseren tijdens de declaratie:

  String[] lines = { "Hello world",
                     "Hello Mars",
                     "Hello Venus",
                     "Hello Jupiter",
                     "Hello Saturn"};

We komen hier nog even terug op de klasse String. We hebben reeds een aantal methoden van deze klasse gebruikt. In de onderstaande tabel geven we nog een aantal methoden van deze klasse die een array van gegevens teruggeven:

ReturnMethodeBeschrijving
String[]split(String regex)Splitst de string op in deel-strings op basis van een scheidings-tekst,
die word opgegeven door middel van een reguliere uitdrukking, afgekort regex.
char[]toCharArray()Geeft de array van karakter van deze string terug.
byte[]getBytes()Geeft de array van bytes van deze string terug.
(standaard karakterset).

We geven een voorbeeld van de methode split():

public class SplitSample {
    public static void main(String[] args) {
        String text = "I just want to say Hello!";
        System.out.println(text);

        String[] words = text.split(" ");
        for(String word: words){
            System.out.println(word);
        }
    }
}

https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/regex/Pattern.htmlWe gaan de tekst opsplitsen in woorden. De scheidings-tekst is hier dus een spatie. We kunnen ook een complexere scheidings-tekst meegeven in de vorm van een reguliere uitdrukking (regular expression), maar dat valt buiten het bestek van deze cursus. We verwijzen je hiervoor naar de documentatie van de klasse Pattern en String.

Het resultaat van deze split-methode is een array van strings die we vervolgens afdrukken met een for each lus.

We kunnen deze methode ook gebruiken om bijvoorbeeld tekst op te splitsen waarbij de verschillende delen gescheiden zijn door een komma of puntkomma. Dit komt voor bij bestanden die opgemaakt zijn met de CSV-indeling (comma separated values)

Ten slotte nog een woordje uitleg over de methode main() die we in elk programma terugvinden.

  public static void main(String[] args)

Deze heeft telkens als argument een array van strings. Deze array bevat de woorden die zijn meegegeven bij het opstarten van het programma. Een voorbeeld:

package helloArgs;

public class ArgumentsSample {
    public static void main(String[] args) {
        System.out.println("Arguments count: " + args.length);
        for(String arg: args){
            System.out.println(arg);
        }
    }
}

Als onze toepassing een module-info.java heeft kunnen we deze toepassing als volgt opstarten:

java -p -m helloArgs/helloArgs.ArgumentsSample Hello World!

Als dezelfde toepassing geen module-info.java heeft moeten we de naam van de jar meegeven i.p.v. de package, dit is dus eigenlijk bedoeld voor toepassingen geschreven met Java 8 of een oudere versie.
Stel dat de jar de naam argumentsSample.jar heeft dan kunnen we deze toepassing als volgt opstarten:

java -jar argumentsSample.jar Hello World!

De woorden die ver gedrukt staan zullen hierbij aan de methode main() worden doorgegeven via de array.

Het meegeven van argumenten aan een programma kan ook als we het opstarten via de IDE. We verwijzen je hiervoor naar de documentatie van de IDE (IntelliJ -> rechts bovenaan “Edit config” gebruiken).

Opdracht 2: Arrays van objecten

  • Maak een programma dat een regel tekst aan de gebruiker vraagt en woorden afdrukt op het scherm. Lees de regel tekst als volgt:
  Scanner keyboard = new Scanner(System.in);
  String text = keyboard.nextLine();