Java Progamm - String split und senkrecht ausgeben?
Hallo,
ich habe eine Aufgabe bekommen, in der ich einen Satz, Wort für Wort senktecht ausgeben muss (siehe Bild unten).
Ich habe in Java aber keinen richtigen Überblick, aber in Python wäre ich so vorgegangen: Split bei " " und in Liste speichern. Dann in einer For Schleife nach und nach die Zeichen je Wort ausgeben.
Bei mir funktioniert das in der Liste aber nicht und es kommen immer Fehlermeldungen....
Könnt ihr mir helfen?
Bzw:
3 Antworten
String s = "Dies ist ein Beispiel";
String[] arr = s.split(" ");
boolean c = true;
for (int j = 0; c; j++){
c = false;
for (String s1 : arr) {
if (j < s1.length()) {
System.out.print(s1.charAt(j) + " ");
c = true;
} else System.out.print(" ");
}
if (c) System.out.println();
}
Kürzer krieg ich's nicht.
Die Variablennamen sind echt furchtbar, weil ich erst einiges anderes rumprobiert habe, fällt mir gerade auf.
Alles gut ^^
Kann ich den String s durch eine manuelle Eingabe durch den Scanner ersetzten? Bzw wenn ich s durch einen scanner definiere, wird immer nur das erste wort ausgegeben. Woran kann das liegen?
Ah okay es funktioneirt. Kannte diesen Befehl nicht. Danke Dir!
Hey, könntest du mir nochmal kurz weiterhelfen?
Ich habe folgendes Feedback bekommen: "Beim Aufgliedern des Satzes wird für die Separation in einzelne Wörter nun genau ein Leerzeichen verwendet. Eine Eingabe kann zwischen den Wörtern aber mehrere Leerzeichen (und Tabulatoren) enthalten, die aber jeweils nur eine Separation darstellen"
Wie kann man das umsetzten?
Hey, könntest du mir nochmal kurz weiterhelfen?Ich habe folgendes Feedback bekommen: "Beim Aufgliedern des Satzes wird für die Separation in einzelne Wörter nun genau ein Leerzeichen verwendet. Eine Eingabe kann zwischen den Wörtern aber mehrere Leerzeichen (und Tabulatoren) enthalten, die aber jeweils nur eine Separation darstellen"Wie kann man das umsetzten?
1) Dir fehlt ein Import für die Klassen (List, ArrayList). Das sind vermutlich die Fehlermeldungen, die du bekommst.
Wirf deinen Import für den Scanner heraus. Selbst wenn du das Objekt später wieder einführst, reicht der Wildcard-Import:
import java.util.*;
2) Das Argument hier:
System.out.println("\n");
brauchst du nicht. Die println-Methode setzt bereits einen Zeilenumbruch.
3) Hier:
System.out.println(liste);
versuchst du, ein Objekt auszugeben (das Listenobjekt). Java würde dir hier eine Kombination aus Hashcode und Klassenspezifier ausgeben. Nicht das, was du möchtest.
Wenn du Werte aus einer Liste ausgeben möchtest, muss über die Liste iteriert werden.
4) Dein Ansatz geht zum Teil schon in die richtige Richtung. Allerdings benötigst du keine extra Liste. Gib doch die Buchstaben direkt aus.
Die Ausgabe lässt sich im Grunde als Raster/Grid darstellen. Du musst durch jedes Wort in der Liste iterieren, um den Buchstaben für die aktuelle Reihe auszugeben. Dieser Prozess muss so oft wiederholt werden, wie das längste Wort in der Liste Buchstaben hat.
In Pseudocode:
sentence = "Dies ist ein erster Beispielsatz für eine senkrechte Wortausgabe."
words = sentence.split(" ")
maxLetterCount = find_longest_word(words)
for index < maxLetterCount:
for word in words:
if index < word.length:
print letter at index position
else:
print space
print linebreak
Die Funktion zur Ermittlung des längsten Worts musst du natürlich noch selbst schreiben.
Hier mal mein Versuch
public class Main
{
public static void main(String[] args) {
String strTest = "Das ist mein kleiner Test!";
String[] arrSplit = strTest.split(" ");
int maxLen = 0;
for (String i : arrSplit){
if(i.length()>maxLen){
maxLen = i.length();
}
}
for(int i=0; i<maxLen; i++){
String s = "";
for(String j : arrSplit){
if(j.length()>i){
s += j.charAt(i)+" ";
}
else{
s += " ";
}
}
System.out.println(s);
}
}
}
War jetzt auch vielleicht nicht dir kürzeste Lösung, aber ich programmiere nur sehr wenig/gar nicht mir Java.
Wow, das ist echt einfach und kompakt! Danke dir vielmals!