Java Progamm - String split und senkrecht ausgeben?


06.03.2021, 22:18

Bzw:

3 Antworten

Von Experte whgoffline bestätigt
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.

Woher ich das weiß:Hobby – Ich programmiere in meiner Freizeit mit Java.
xXThreeGamerXx 
Fragesteller
 06.03.2021, 22:49

Wow, das ist echt einfach und kompakt! Danke dir vielmals!

0
Yoshi32  06.03.2021, 22:52
@xXThreeGamerXx

Die Variablennamen sind echt furchtbar, weil ich erst einiges anderes rumprobiert habe, fällt mir gerade auf.

1
xXThreeGamerXx 
Fragesteller
 06.03.2021, 22:56
@Yoshi32

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?

0
xXThreeGamerXx 
Fragesteller
 06.03.2021, 22:59
@Yoshi32

Ah okay es funktioneirt. Kannte diesen Befehl nicht. Danke Dir!

0
xXThreeGamerXx 
Fragesteller
 07.03.2021, 21:55
@xXThreeGamerXx

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?

0
xXThreeGamerXx 
Fragesteller
 07.03.2021, 21:55
@Yoshi32

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?

0

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);
        }
  }
}

https://onlinegdb.com/H13vVdbXd

Woher ich das weiß:Studium / Ausbildung – Informatikstudent
xXThreeGamerXx 
Fragesteller
 06.03.2021, 23:01

Funktioniert soweit bestens! Danke Dir!

1
whgoffline  06.03.2021, 23:02
@xXThreeGamerXx

War jetzt auch vielleicht nicht dir kürzeste Lösung, aber ich programmiere nur sehr wenig/gar nicht mir Java.

1