Erste Schritte Eingelesenen Satz - Wörter und Leerzeichen getrennt in 2x Array's

The_Virus

Mitglied
Ich habe mal wieder eine Aufgabe für die Uni zu lösen, dabei soll ich einen Satz mit beliebig vielen Leerzeichen zwischen den Wörtern in ein Array einlesen. Da ich die Leerzeichen aber brauche, sollen diese auch in ein zweites Array bzw. die Anzahl der Leerzeichen.
Bsp.
Code:
"  das    ist das      Haus   vom Nikolaus"
Leerzeichen: 2 - 4 - 1 - 6 - 3 - 1

In das Wort Array soll:
[0] das
[1] ist
[2] das
[3] Haus
[4] vom
[5] Nikolaus

In das Leerzeichen Array soll:
[0] 2
[1] 4
[2] 1
[3] 6
[4] 3
[5] 1

Das reine Wort Array habe ich sogar hinbekommen, wenn auch sehr umständlich, wie ich finde:
Java:
	private String satz;
	private String[] wort;
	private String[] keinLeer;	

		public void einlesen() {
		Scanner einlesen = new Scanner(System.in);
		System.out.println("Bitte geben Sie einen Satz ein!");
		satz = einlesen.nextLine();
		wort = satz.split(" ");
	}
	
	public void arrayOhneLeerzeichen() {
		// Laenge von keinLeer[]
		int zaehler1 = 0;
		for (int h = 0; h < wort.length; h++) {
			if(wort[h].equals("") == false) {
				zaehler1++;
			}
		}
		// keinLeer[] fuellen
		keinLeer = new String[zaehler1];
		int zaehler2 = 0;
		for (int i = 0; i < wort.length; i++) {
			if(wort[i].equals("") == false) {
				keinLeer[zaehler2] = wort[i];
				zaehler2++;
			}
		}		
	}
Zu dem Leerzeichen Array brauche ich Hilfe. Versuch das nun schon mehrere Stunden. :-(
 
Zuletzt bearbeitet:
S

SlaterB

Gast
auf split() verzichte besser, das sieht nach Cheaten aus,

erstelle anfangs zwei große Arrays, ruhig so groß wie der String lang ist,
dann nur ein Durchlauf,
baue ein aktuelles Wort zusammen, Zeichen für Zeichen, vergleiche jeweils das aktuellen Zeichen mit diesem Wort,

je nachdem ob das aktuelle Zeichen ein Leerzeichen ist oder nicht, und das nebenher aufgebaute Wort nur Leerzeichen oder gerade nicht Leerzeichen enthält, das Wort weiter aufbauen oder in eines der beiden Arrays einfügen und ein neues Wort beginnen,
also auf die Wechsel achten, nebenher mitzählen wie der Stand in beiden Arrays ist

wenn es sein muss diese Schleife quasi zweimal durchlaufen, beim ersten Mal nur zählen um dann Arrays in der richtigen Größe zu erstellen,
ansonsten am Ende wahrscheinlich von den großen Arrays auf passende umkopieren
 

nrg

Top Contributor
ich würde die anzahl der delimiter und den token mappen. am besten in einer inner class oder so. finde "index-mapping" nämlich etwas unschön.

z.b.:
Java:
import java.util.ArrayList;
import java.util.List;

public class SplitCount {

	private char delimiter;

	public SplitCount(char delimiter) {
		this.delimiter = delimiter;
	}

	public Token[] split(String str) {
		List<Token> tokens = new ArrayList<Token>();
		StringBuilder sb = new StringBuilder();
		int delimCount = 0;
		for (char c : str.toCharArray()) {
			if (c == delimiter) {
				if (sb.length() > 0) {
					tokens.add(new Token(sb.toString(), delimCount));
					sb.setLength(0);
					delimCount = 0;
				}
				delimCount++;
			} else {
				sb.append(c);
			}
		}
		if (sb.length() > 0) tokens.add(new Token(sb.toString(), delimCount));
		return tokens.toArray(new Token[tokens.size()]);
	}

	public class Token {
		
		public int preDelims;
		public String token;
		
		public Token(String token, int preDelims) {
			this.token = token;
			this.preDelims = preDelims;
		}
	}
	
	// Testmain
	public static void main(String[] args) {
		SplitCount sc = new SplitCount(' ');
		for (Token t : sc.split("  das    ist das      Haus   vom Nikolaus"))
			System.out.println(t.token + " hat " + t.preDelims + " führende delimiter");
	}
}

delimiter nach dem letzten token werden dabei ignoriert.

edit: so ists bissle schöner
 
Zuletzt bearbeitet:

The_Virus

Mitglied
Danke schonmal euch beiden.

@SlaterB:
Warum ist split() cheaten?
Deinen Lösungsvorschlag verstehe leider nicht so ganz, weiß nicht so recht wie das als Code aussehen soll. Werde mich daran aber morgen nochmal versuchen.

@nrg:
Dein Lösungsvorschlag ist zu weit fortgeschritten für mich. Ich bin blutiger Java-Anfänger, mache das seit 9 Wochen oder so. Ich verstehe weder was token / delimiter mappen bedeutet, noch was index-mapping ist.

Über weitere Vorschläge würde ich mich freuen. So einfach gehalten wie nur möglich!
 
Zuletzt bearbeitet:
S

SlaterB

Gast
eine Aufgabe zum Auftrennen eines Satzes in Bestandteile klingt nun mal genau nach Schleifen usw. wie deine umständliche Variante schon aussieht,
es macht keinen Sinn da eine einzelne API-Methode als Antwort hinzuschreiben, was soll das als Lernergebnis zeigen?

und das auch noch schlecht zu machen so dass danach immer noch lange Schleifen kommen müssen zeigt nur dass split() nicht mal gut bedient werden kann,
[c]split(" +")[/c] etwa würde die erste Teil-Aufgabe fast komplett lösen, die zweite mit einem anderen RegEx-Ausdruck,
wobei dies beides freilich noch eine Stufe höher ist als nur split() nach einem Zeichen,
 
Zuletzt bearbeitet von einem Moderator:

The_Virus

Mitglied
Ok Ok, also ohne split(). Ich werds versuchen und mich morgen nochmal melden...

EDIT:
Weil du so auf den Lerneffekt gepocht hast. Die von mir oben genannte "Aufgabe" ist natürlich nicht die komplette Aufgabe, das ist nur ein Teil einer Aufgabe. Das hier soll am Ende dabei rauskommen:
Übungsblatt "Arrays"
Für die Ausgabe brauche ich die beiden Arrays.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Schlüsselworte Zählen und Zuweisen von eingelesenen Zahlen Java Basics - Anfänger-Themen 1
F Variablen Übergabe von eingelesenen Variablen in neue Klasse Java Basics - Anfänger-Themen 15
S Eingelesenen String vergleichen Java Basics - Anfänger-Themen 2
S Rückgabe eines eingelesenen 2D Arrays aus Klasse heraus Java Basics - Anfänger-Themen 3
Schandro Eingelesenen Text wieder ausgeben Java Basics - Anfänger-Themen 9
M Anzahl von Wörter in einer eingelesenen Datei Java Basics - Anfänger-Themen 10
F Ziffern einer eingelesenen Zahl ausgeben bzw. bearbeiten Java Basics - Anfänger-Themen 4
U Kann man bei Java gleich mehrere Bedingungen prüfen in der If, aber in einem "Satz"? Java Basics - Anfänger-Themen 1
K mit String.splitt(",") ganzen Satz erhalten? Java Basics - Anfänger-Themen 3
Z Satz aufteilen und die Wörter zählen (HashMap) Java Basics - Anfänger-Themen 15
V Erste Schritte Vokale im Satz ersetzen Java Basics - Anfänger-Themen 20
O Großbuchstaben im Satz zählen Java Basics - Anfänger-Themen 6
D Vokale auslesen in Satz Java Basics - Anfänger-Themen 7
L Wertebereich if-Satz angeben (z.B: Benzinverbrauch 51 <=75<) Java Basics - Anfänger-Themen 1
U Primfaktorzerlegung m. kleinem Fermat-Satz Java Basics - Anfänger-Themen 4
C Stringeingabe: kein Satz wegen Leerzeichen möglich Java Basics - Anfänger-Themen 3
D Satz des Pythagoras Java Basics - Anfänger-Themen 30
H Satz abkürzen Java Basics - Anfänger-Themen 13
S Satz des Pythagoras Java Basics - Anfänger-Themen 9
S ein Satz aus einer Datei in eine andere Datei Speichern? Java Basics - Anfänger-Themen 5
B Satz Zufallszahlen ohne Wiederholung Java Basics - Anfänger-Themen 14
julian0507 Wörter einlesen lassen und rückwärts ausgeben Java Basics - Anfänger-Themen 7
B String - Wörter finden, welches Punkt und entsprechender Pre / Suffix hat? Java Basics - Anfänger-Themen 30
M Regex für bestimmte Wörter bzw. bestimmte Zeichen erstellen Java Basics - Anfänger-Themen 5
N Wörter und Zahlen nach speziellen Wörtern ausgeben Java Basics - Anfänger-Themen 11
S spezielle Wörter aus Liste entfernen Java Basics - Anfänger-Themen 2
J Wörter aus Textdatei suchen Java Basics - Anfänger-Themen 2
CptK Datentypen Verdrehte Wörter wieder herstellen Java Basics - Anfänger-Themen 21
CptK Variablen Wörter erschließen Java Basics - Anfänger-Themen 7
B String: suche nach Wörter und in List<String> speichern Java Basics - Anfänger-Themen 3
Orkanson Methoden String in Wörter zerlegen und Endungen der Wörter überprüfen. Java Basics - Anfänger-Themen 4
JavaNewbie2.0 Tausende Wörter in Arrays automatisch einfügen Java Basics - Anfänger-Themen 10
B Collections Java Wörter in String zählen und geordnet ausgeben Java Basics - Anfänger-Themen 10
E Datei einlesen und bestimmte Wörter ausgeben Java Basics - Anfänger-Themen 2
DestinatioN Problem beim splitten eines Satzes in Wörter und die Wörter in Buchstaben Java Basics - Anfänger-Themen 2
A Wie am effizientesten bzw. schnellsten Namen/Wörter sortieren? Java Basics - Anfänger-Themen 1
I String teilen und zwei Wörter generieren Java Basics - Anfänger-Themen 1
A Text teilen und Wörter zählen Java Basics - Anfänger-Themen 7
I String trennen und verschiedene Wörter holen Java Basics - Anfänger-Themen 6
T Eingegebene Wörter ausgeben? Java Basics - Anfänger-Themen 3
T Wörter mit @ als Zeichen finden Java Basics - Anfänger-Themen 13
J Alle Wörter der Länge n mit 0 und 1 Java Basics - Anfänger-Themen 17
G wörter speichern Java Basics - Anfänger-Themen 12
T Erste Schritte einzelne Wörter aus textdatei lesen... Java Basics - Anfänger-Themen 4
C Wörter aus einer txt datei lesen Java Basics - Anfänger-Themen 19
C String Arrays - häufigste Wörter Java Basics - Anfänger-Themen 10
B Input/Output Wörter zählen & sortieren Java Basics - Anfänger-Themen 9
S Buchstaben/Wörter im String zählen Java Basics - Anfänger-Themen 6
K Anzahl Wörter in Zeile Java Basics - Anfänger-Themen 24
F wörter trennen und in txt-file schreiben Java Basics - Anfänger-Themen 5
J Von einem String einzelne Wörter speichern Java Basics - Anfänger-Themen 6
R Wörter-KarteiSystem/Vokabel Trainer Source Fragen Java Basics - Anfänger-Themen 9
A Wörter umgekehrten Reihenfolge ausgeben Java Basics - Anfänger-Themen 3
J Wörter in einem string zählen und die anzahl zurückgeben Java Basics - Anfänger-Themen 4
P Zwei Wörter vergleichen Java Basics - Anfänger-Themen 11
S Wörter zählen Java Basics - Anfänger-Themen 19
N Wörter zählen im String Java Basics - Anfänger-Themen 3
Screen Wie lese ich Wörter ein? Java Basics - Anfänger-Themen 6
G Wörter Zählen Java Basics - Anfänger-Themen 11
J Wörter im String zählen Java Basics - Anfänger-Themen 4
P wörter im string zählen Java Basics - Anfänger-Themen 9
G Häufigkeit der Wörter einer Webseite zählen Java Basics - Anfänger-Themen 7
C Wörter suchen Java Basics - Anfänger-Themen 4
S Regex, Wörter ersetzen Java Basics - Anfänger-Themen 2
S Welche Bedeutung haben diese Wörter? Java Basics - Anfänger-Themen 2
S Zeilen, Zeichen, Wörter Java Basics - Anfänger-Themen 3
K Wörter zählen auf Internetseiten... die zweite Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben