Java - Wörter in String zählen

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Das \s ist ein regulärer Ausdruck für Leerzeichen (bzw. Whitespace), das + dahinter bdeutet mindestens eines und beliebig viele, ein Stern würde keines oder beliebig viele bdeuten. trim() scheidet am Anfang und Ende des Strings Leerzeichen ab, split() teilt den String in Einzelstrings auf, wobei der reguläre Ausdruck das Trennzeichen der Einzelstrings definiert. Length() zählt die Einzelstrings, was du ja willst.

Würdest du der Zähler-Methode (Umlaute sollte man besser nicht in Namen verwenden) anstelle eines Stringobjects null übergeben gäbe es eine Assertion, davor schützt der erste Teil mit dem ?.

PerfectMuffin  28.04.2013, 10:11

Wo findet man denn was zu diesen regulären Ausdrücken? Ich komme immer durcheinander, wenn die jemand verwendet.

0

Der Springende Punkt ist die Funktion zähler.

return Satz == null ? 0 : Satz.trim().split("\s+").length;

Das bedeutet:

Wenn Satz null(Ein nicht definiertes Objekt) ist, dann liefere 0 zurück, andernfalls liefere die Anzahl der Unterstrings zurück, die man erhält, wenn man eine speziell behandelte(trim entfernt soweit ich weiß am Anfang und am Ende des Satzes alle Leerzeichen und ersetzt die in der mitte mit...anscheinend"\s+") Kopie von Satz an jeder Markierung "\s+" zerschneidet.

Du solltest diese Funktion NICHT verwenden, da du sie 1. nicht selbst geschrieben hast und 2. gar nicht genau weißt, was sie tut.

Hier noch einmal eine Erklärung, was null ist:

Wenn du eine Variable verwenden willst, muss ihr immer ein Wert zugewiesen sein. Primitive Datentypen haben dabei den Standardwert 0 (Bytes alle leer) und Objekte haben als Standardwert null(Im Speicher wird als Platzhalter 0 als Adresse des Objekts verwendet, das nennt man NullPointer).

NullPointer haben keine Elementfunktionen oder Variablen, ein versuch diese aufzurufen endet immer mit einer NullPointerException.

String a=null;
a.length();//NullPointerException

Dein Freund benutzt diesen Abschnitt Satz == null ? 0 : wahrscheinlich für den Fall, dass sc.nextLine(); aus irgendeinem Grund null zurückliefert, dass das passieren kann, ist mir aber neu.